字典:将键值对(键值对用英文冒号隔开)用英文逗号隔开,并放入花括号中
dict={'键1':'值','键2':'值',...}
b={
1:'qwe',
2:'qaz',
3:'asd',#最后一个逗号可加可不加
}
#字典不强调缩进,只是为了美观,增加代码的可读性
【键不能相同,值可以相同】
【键相同时后一个值会覆盖前面设置的值】
【值可以取任何数据类型,键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行】
1》创建空字典
1. 使用{}来创建字典
d={}
2. 使用内置函数创建字典
d=dict()
2》len求长【求取字典中的键值对】
d={'a':23,'b':44,'c':77}
print(len(d))
3》将其他序列转化为字典
#使用dict()转化为字典
l1=['qa','ar','zx','er','ec','rm']#必须对应
l2=[('a','b'),('c','d')]
t1=(['a','b'],['c','d'])
t2=('ab','ac','ad')
t3=('1q','2q','3w')
#键相同的,值不同,后值会代替前值
print(dict(l1),dict(l2),dict(t1),dict(t2),dict(t3))
4》向字典中增加,替换,删除键值对
a={1:99,2:98,3:97,4:96}
a[6]=95#增加了6:95的键值对
print("add 5:95",a)
a[6]=94#将6对应的值替换成94
print("replace 95 94: ",a)
del a[1]#删除了键为1的键值对
#a.pop(a[1])#同上一条一样,这两条删除不存在的键时会报错,为保程序顺利执行完,一般会判断key in dict
print(a)
序号 | 函数及描述 |
---|---|
1 | dict.clear() 删除字典内所有元素 |
2 | dict.copy() 返回一个字典的浅复制 |
3 | dict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
4 | dict.get(key, default=None) 返回指定键的值,如果键不在字典中返回 default 设置的默认值 |
5 | key in dict 如果键在字典dict里返回true,否则返回false |
6 | dict.items() 以列表返回一个视图对象 |
7 | dict.keys() 返回一个视图对象 |
8 | dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
9 | dict.update(dict2) 把字典dict2的键/值对更新到dict里 |
10 | dict.values() 返回一个视图对象 |
11 | pop(key[,default]) 删除字典 key(键)所对应的值,返回被删除的值。 |
12 | popitem() 返回并删除字典中的最后一对键和值。 |
2. copy
a={'a':12,'b':13,'c':15}
b=a.copy()#不会随原字典发生改变
c=a#同一对象,会随原字典改变
a['b']=26
print(a)
print(b)
print(c)
'''
{'a': 12, 'b': 26, 'c': 15}
{'a': 12, 'b': 13, 'c': 15}
{'a': 12, 'b': 26, 'c': 15}
'''
3. fromkeys(seq,val)【是返回新字典的类方法,常用于更新数据,val默认为None】
a=[1,2,3,4,5]
b={}
b=b.fromkeys(a,'c')#用a中的每个元素做键,值固定
print(b)
4. d.get(键)与d[键]
d={'a':23,'b':44,'c':77}
#获取值
print(d['a'])#访问不存在的键报错
print(d.get('d',0))#访问不存在的键返回default,default默认为None
8. setdefault(键,值)【字典中有该键不管,字典中没有该键则添加该键值对】
dict={'a':1}
dict.setdefault('a',2)#存在a键,不添加a值
dict.setdefault('b',2)#不存在b键,添加b对应的值
dict.setdefault('b',7)##存在b键,不添加b值
print(dict)#{'a': 1, 'b': 2}
对一串字符串中的字符个数进行计算
m='aaaa bb yyugdh'
count={}
for cha in m:
count.setdefault(cha,0)
count[cha]=count[cha]+1
print(count)
9. update【合并字典,有相同键,b的值覆盖a】
a={1:99,2:98,3:97,4:96}
b={5:95,6:94,7:93,8:92}
a.update(b)
print("copy b to a:",a,b)
6,7,10. keys,values,items【获取字典中的所有键;获取字典中的所有值;以列表返回一个视图对象】【字典内的键值对是无序存在的,所以不能按照列表元组那样用索引访问值,要用键访问值】
d={'a':12,'b':14,'c':34,'d':35}
print(d.keys(),d.values(),d.items())
#利用keys,items遍历字典
for i in d:
print(i,d[i])
for k,v in d.items():
print(k,v)
练习:有A,B,C,D四人,A有[2a,3b,6c],B有[2b,3u,3a],C有[2a,3c,3u],D有[3a,8u]
ABCD各带了多少东西;加在一起abcu各有多少
all = {'A': {'a': 2, 'b': 3, 'c': 6}, 'B': {'b': 2, 'u': 3, 'a': 3}, 'C': {'a': 2, 'c': 3, 'u': 3},'D': {'a': 3, 'u': 8}}
#a=10,b=5,c=9,u=14
pop={}
n=0
for i, j in all.items():#all的键:值
for k in j.keys():#all值的键
pop.setdefault(k,0)#若存在该键则值不变为0
pop[k]+=j.get(k)#键值=键值+
single={}
for i,j in all.items():#遍历all字典的键值对
single[i]=sum(j.values())#提取i键对应的j字典,获取j字典的值组成的列表,并求和
print('one people things',single)
print('all people things',pop)
#one people things {'A': 11, 'B': 8, 'C': 8, 'D': 11}
#all people things {'a': 10, 'b': 5, 'c': 9, 'u': 14}