概述
Python菜鸟编程第四课字典集合
1 字典
字典是Python中除列表以外使用最灵活的内置数据类型。
字典的特点:无序,可变。
与列表的区别:
- 列表有序,字典无序
- 列表通过索引访问元素,字典通过键访问元素
1.1 字典的创建
字典的值可以取如何数据类型,但键不可以,必须为不可变数据类型,即key必须可哈希。
可哈希:不可变
不可哈希:可变
特点:
-
key:value,键值对之间用冒号连接。
-
key:value组成字典的一个元素
-
键值对之间用逗号隔开
-
整个字典用{}包裹
1.11 直接创建字典
demo:
d1 = {"id": 31802089, "name": "张三"}
print(d1)
print(type(d1))
d2=dict(id=2019,name="sss",age=16)
print(d2)
运行结果:
{'id': 31802089, 'name': '张三'}
<class 'dict'>
{'id': 2019, 'name': 'sss', 'age': 16}
1.12 使用zip()创建
demo:
# zip() 函数的作用是从参数中的多个迭代器取元素组合成一个新的迭代器。
# zip() 内部元素是元组,传入的参数可以是元组、列表、字典等迭代器。
key=["id","name","age"]
value=(2018,'sss',18)
print(list(zip(key,value)))
print(type(zip(key,value)))
d3=dict(zip(key,value))
print(d3)
运行结果:
[('id', 2018), ('name', 'sss'), ('age', 18)]
<class 'zip'>
{'id': 2018, 'name': 'sss', 'age': 18}
1.13 通过字典fromkeys方法创建字典
dict.fromkeys(seq,val=None)
创建并返回一个字典
- 以seq中的元素作为该字典的键
- val的值作为该字典的值,如不提供,默认为None
demo:
d1=dict.fromkeys(['Bob','Abk','Lsd'],[45,232])
print(d1)
d2=dict.fromkeys(['Bob','Abk','Lsd'],'sss')
print(d2)
运行结果:
{'Bob': [45, 232], 'Abk': [45, 232], 'Lsd': [45, 232]}
{'Bob': 'sss', 'Abk': 'sss', 'Lsd': 'sss'}
1.2 字典的增加
- 直接增加
假如key不存在,新建键值对,假如key存在,则更新值。
demo:
d1 = {"id": 31802089, "name": "张三","age":16}
d1["addreee"]='Hangzhou'
print(d1)
d1["age"]=222
print(d1)
运行结果:
{'id': 31802089, 'name': '张三', 'age': 16, 'addreee': 'Hangzhou'}
{'id': 31802089, 'name': '张三', 'age': 222, 'addreee': 'Hangzhou'}
1.3 字典的删除
函数名 | 描述 |
---|---|
pop(x) | 删除key=x的键值对,如果key存在返回value值,否则报错 |
popitem() | 随机删除一对键值对(因为字典本身是无序所以称为随机,其实每次删除的都是最后一个元素) |
del | 删除字典并清除内存空间 |
clear | 清空字典 |
demo:
#pop()
d1 = {"id": 31802089, "name": "张三","age":16}
print(d1.pop('name'))
#popitem()
d1 = {"id": 31802089, "name": "张三","age":16}
print(d1.popitem())
print(d1)
key,value=d1.popitem()
print(key)
print(value)
print(d1)
#del
d1 = {"id": 31802089, "name": "张三","age":16}
del d1['id']
print(d1)
del d1
print(d1)
#clear()
d1 = {"id": 31802089, "name": "张三","age":16}
d1.clear()
print(d1)
运行结果:
#pop()
张三
#popitem()
('age', 16)
{'id': 31802089, 'name': '张三'}
name
张三
{'id': 31802089}
#del
{'name': '张三', 'age': 16}
NameError: name 'd1' is not defined
#clear()
{}
1.4 字典的修改
update()函数
demo:
d1 = {"id": 31802089, "name": "张三","age":16}
d1["addreee"]='Hangzhou'
d1.update({"id":1235})
print(d1)
运行结果:
{'id': 1235, 'name': '张三', 'age': 16, 'addreee': 'Hangzhou'}
d1.update(d2): 把字典d2中的键值对更新到d1中。
- 假如两个字典的键完全不同,则把d2的键值对全部添加至d1中
- 假如存在相同的键,则更新dict中对应的值
demo:
d1 = {"id": 31802089, "name": "张三","age":16}
# print(d1.pop('name'))
print(d1)
d2={'work':'math','sex':'man'}
d1.update(d2)
print(d1)
d3={'work':'English'}
d1.update(d3)
print(d1)
运行结果:
{'id': 31802089, 'name': '张三', 'age': 16}
{'id': 31802089, 'name': '张三', 'age': 16, 'work': 'math', 'sex': 'man'}
{'id': 31802089, 'name': '张三', 'age': 16, 'work': 'English', 'sex': 'man'}
1.5 字典的查找及遍历
1.51 直接通过字典的key访问value
demo:
print(d1['id'])
运行结果:
31802089
1.52 dict.get()访问value
- 不确定字典中是否存在某个键而又想对其进行操作,比如获取值——>get()方法.
- 当key不存在的时候,不会抛出异常,而是返回默认值,不输入默认值则返回None.
demo:
d1 = {"id": 31802089, "name": "张三","age":16}
print(d1.get('id'))
print(d1.get(16))
print(d1.get('sdada',456))#这里的456是默认值,当key不存在则会返回默认值
运行结果:
31802089
None
456
1.53 dict.setdefault(key,default=None)
- 通过setfault()函数可以返回查找的值。
- 当key不存在的时候,不会抛出异常,而会返回default(None),并在dict中添加key:default元素。
demo:
d1 = {"id": 31802089, "name": "张三","age":16}
print(d1.setdefault('id'))
print(d1.setdefault('sex'))
print(d1)
print(d1.setdefault('address','Hangzhou'))
print(d1)
运行结果:
31802089
None
{'id': 31802089, 'name': '张三', 'age': 16, 'sex': None}
Hangzhou
{'id': 31802089, 'name': '张三', 'age': 16, 'sex': None, 'address': 'Hangzhou'}
1.54 遍历
函数名 | 描述 |
---|---|
keys() | 返回字典中的所有键所组成的一个可迭代序列 |
values() | 它返回字典中的所有值所组成的一个可迭代序列 |
items() | 返回可遍历的(键, 值) 元组数组。 |
demo:
d1 = {"id": 31802089, "name": "张三","age":16}
for key in d1.keys():
print(key,end=' ')
print()
for value in d1.values():
print(value,end=' ')
print()
for key, value in d1.items():
print(key, ":", value,end=' ')
print()
for item in d1.items():
print(item,end=' ')
运行结果:
id name age
31802089 张三 16
id : 31802089 name : 张三 age : 16
('id', 31802089) ('name', '张三') ('age', 16)
2. 集合
特点:
- 无序
- 不可重复
- 不可更改
- 内部的元素是可哈希的
- 集合本身是不可哈希的
- 用{}括号括起来的单元素数据集,不支持索引
用途:
- 去重(列表–>集合,自动去重)
- 关系测试
2.1集合的创建
demo:
#空集合的创建
st=set()
print(st)
#多元素的集合创建
st=set()
st={1,2,3,4,'adssa','sda'}
print(st,type(st))
st={1,2,3,4,'adssa','sda',['a','b']}
print(st)
运行结果:
set()
{1, 2, 3, 4, 'adssa', 'sda'} <class 'set'>
TypeError: unhashable type: 'list'#集合的元素必须是可哈希的,即不可变的。
2.2强转
demo:
l1=[1,2,3,4]
st=set(l1)
print(st,type(st))
str1='good'
st1=set(str1)
print(st1,type(st1))
d1 = {"id": 31802089, "name": "张三","age":16}
s1=set(d1)
print(s1)
运行结果:
{1, 2, 3, 4} <class 'set'>
{'g', 'd', 'o'} <class 'set'>
{'name', 'id', 'age'}#字典强转以后,会忽略value,只取key。
2.3 集合的增加
函数名 | 描述 |
---|---|
add() | 增加元素 |
update() | 增加多个元素 |
demo:
s1 = {'11', '22', '33'}
print(s1)
s1.add('222')
print(s1)
s1.add(22)
print(s1)
s1.update({'1', 2, 3})
print(s1)
运行结果:
{'33', '22', '11'}
{'222', '33', '22', '11'}
{'222', '22', '11', 22, '33'}
{2, '222', 3, '22', '11', '1', 22, '33'}
2.4集合的删除
函数名 | 描述 |
---|---|
pop() | 删除排序最小的一个元素 |
discard() | 使用discard()可以删除set当中的元素,在set当中没有的话不会报错 |
remove() | 使用remove()可以删除set当中的元素,在set当中没有的话会报错 |
del | 删除集合,清除内存 |
clear() | 情况集合 |
demo:
#pop()
st=set()
st={1,2,3,4,'adssa','sda'}
print(st.pop())
print(st)
print(st.pop())
print(st)
#discard()
st=set()
st={1,2,3,4,'adssa','sda'}
st.discard('sda')
print(st)
st.discard('a')
print(st)
#remove()
st=set()
st={1,2,3,4,'adssa','sda'}
st.remove('sda')
print(st)
st.remove('a')
print(st)
#del
st=set()
st={1,2,3,4,'adssa','sda'}
del st
print(st)
#clear()
st=set()
st={1,2,3,4,'adssa','sda'}
st.clear()
print(st)
运行结果:
#pop()
1
{2, 3, 4, 'adssa', 'sda'}
2
{3, 4, 'adssa', 'sda'}
#discard()
{1, 2, 3, 4, 'adssa'}
{1, 2, 3, 4, 'adssa'}
#remove()
{1, 2, 3, 4, 'adssa'}
KeyError: 'a'
#del
NameError: name 'st' is not defined
#clear()
set()
2.5集合的修改
集合单个元素不可修改。
2.6集合的查看
集合是无序的,所以不能用索引去查。
2.7 集合的遍历
demo:
st=set()
st={1,2,3,4,'adssa','sda'}
#元素遍历
for i in st:
print(i,end=' ')
print()
#枚举遍历
for i in enumerate(st):
print(i,end=' ')
运行结果:
1 2 3 4 sda adssa
(0, 1) (1, 2) (2, 3) (3, 4) (4, 'sda') (5, 'adssa')
2.8集合的基本运算
函数名 | 描述 |
---|---|
m.isdisjoint(n)) | 判断m与n是否不存在交集(有交集False,无交集True) |
m.issubset(n) / m<=n | 判断 m 是否为 n的子集 |
m.issuperset(n) / m>=n | 判断m是否为n的父集 |
m.intersection(n) /m&n | 返回m与n的交集 |
m.union(n) / m|n | 返回m与n的并集 |
m.difference(n) / m-n | 返回m与n的差集 |
ss1.symmetric_difference(ss2) / m^n | 返回m与n的补集 |
2.81子集
demo:
s1=set('abcd')
s2=set('bcde')
s3=set('ab')
print(s1,s2,s3,'n')
print(s1<s2)
print(s3.issubset(s1))
运行结果:
{'c', 'a', 'b', 'd'} {'c', 'e', 'b', 'd'} {'a', 'b'}
False
True
2.82 父集
demo:
s1=set('abcd')
s2=set('bcde')
s3=set('ab')
print(s1,s2,s3,'n')
print(s1>=s2)
print(s1.issuperset(s3))
运行结果:
{'c', 'a', 'b', 'd'} {'c', 'e', 'b', 'd'} {'a', 'b'}
False
True
2.83 交集
demo:
ss1 = {1, 2, 3, 4, 5}
ss2 = {3, 4, 5, 6, 7}
print(ss1 & ss2)
print(ss1.intersection(ss2))
运行结果:
{3, 4, 5}
{3, 4, 5}
2.84 并集
demo:
ss1 = {1, 2, 3, 4, 5}
ss2 = {3, 4, 5, 6, 7}
print(ss1 | ss2)
print(ss1.union(ss2))
运行结果:
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}
2.85 差集
demo:
ss1 = {1, 2, 3, 4, 5}
ss2 = {3, 4, 5, 6, 7}
print(ss1 - ss2)
print(ss1.difference(ss2))
运行结果:
{1, 2}
{1, 2}
2.86补集
demo:
ss1 = {1, 2, 3, 4, 5}
ss2 = {3, 4, 5, 6, 7}
print(ss1 ^ ss2)
print(ss1.symmetric_difference(ss2))
运行结果:
{1, 2, 6, 7}
{1, 2, 6, 7}
3. 练习题
1.利用字典的fromkeys()给列表去重
demo:
l1=['a','q','a','b','we','b','q','a']
d1={}
l2=list(d1.fromkeys(l1).keys())
print(l2)
运行结果:
['a', 'q', 'b', 'we']
博主qq:1031748759,欢迎批评指正!
最后
以上就是大胆苗条为你收集整理的# Python菜鸟编程第四课字典集合Python菜鸟编程第四课字典集合的全部内容,希望文章能够帮你解决# Python菜鸟编程第四课字典集合Python菜鸟编程第四课字典集合所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复