字典的操作
字典
- 用{}括起来,以键值对存储的容器型数据类型
- 键(唯一的):必须是不可变的数据类型(常用:str,int)
- 值:可以是任意数据类型、对象
- 字典3.5x版本之前(包括3.5)是无序的。
- 字典3.6x会按照初次建立字典的顺序排列,学术上不认为是有序的。
- 字典3.7x之后都是有序的。
优点:
- 存储数据关联性比较强
- 字典的查询数度非常快
缺点:
- 以空间换时间
字典创建方法
#方式一
dic=dict((('ont',1),('two',2),('three',3)))
print(dic)
#方式二
dic=dict(one=1,two=2,three=3)
print(dic)
#方式三
dic=dict({'one':1,'two':2,'three':3})
print(dic)
#方式四(update)有则更新,无则添加
dic={'name':'xiaoxiannv','age':20}
dic.update([(1,'a'),(2,'b'),(3,'c')])
print(dic)
得:
{'name': 'xiaoxiannv', 'age': 20, 1: 'a', 2: 'b', 3: 'c'}
#合并两个字典
dic={'name':'xiaoxiannv','age':20}
dic1={ 1: 'a', 2: 'b', 3: 'c'}
dic.update(dic1)
print(dic)
得:
{'name': 'xiaoxiannv', 'age': 20, 1: 'a', 2: 'b', 3: 'c'}
#方式四(快速创建一个字典)
a=dict.fromkeys('123',666)
print(a)
得:{'1': 666, '2': 666, '3': 666}
#坑(值公用一个)
b=dict.fromkeys([1,2,3],[])
b[1].append(666)
print(b)
得:{1: [666], 2: [666], 3: [666]}
b=dict.fromkeys([1,2,3],[])
b[1]=666
print(b)
得:{1: 666, 2: [], 3: []}
dict增
#增
# 方式一(有则改之,无则加之)
dic={'name':'xiaoxiannv','age':20}
dic['hobby']='睡觉'
print(dic)
# 方式二(setdefault)(有则不变,无责加之)
dic={'name':'xiaoxiannv','age':20}
dic.setdefault('hoppy','摄影')
print(dic)
dict删
# 删
#方式一(三颗星,重要)
dic={'name':'xiaoxiannv','age':20}
dic.pop('name')
print(dic)
dic={'name':'xiaoxiannv','age':20}
ret=dic.pop('hoppy','没有此键') #有第二参数,设置第二参数则不会报错
print(ret)
#方式二(清空
dic={'name':'xiaoxiannv','age':20}
dic.clear()
print(dic)
#方式三
dic={'name':'xiaoxiannv','age':20}
del dic['age']
print(dic)
dict改
#改
# 方式一(有则改之,无则加之)
dic={'name':'xiaoxiannv','age':20}
dic['hobby']='睡觉'
print(dic)
dict查
# 查
# 方式一
dic={'name':'xiaoxiannv','age':20}
print(dic['age'])
print(dic['age1']) #没有此数据时将会报错
#方式二
di=dic.get('name')
di1=dic.get('name1','没有此数据') #不会报错,有第二参数
print(di1)
keys,values,items的使用
dic={'name':'xiaoxiannv','age':20}
print(dic.keys()) #获取字典所有键
print(dic.values()) #获取字典所有值
print(dic.items()) #获取整个键值对,以元组的形式
#keys(),values()都可以直接转换成列表的形式
dic={'name':'xiaoxiannv','age':20}
print(list(dic.keys()))
dic={'name':'xiaoxiannv','age':20}
print(list(dic.values()))
#items,把键值对都存在一个列表
dic={'name':'xiaoxiannv','age':20}
a=[]
for k ,v in dic.items():
a.append(k)
a.append(v)
print(a)
字典常见错误纠正
- 循环一个字典时,改变这个字典的大小,就会报错
dic={'k1':1,'k2':2,'k3':4,'ss':5}
for i in dic.keys():
if 'k' in i:
dic.pop(i)
print(dic) #循环一个字典时,改变这个字典的大小,就会报错
得:
File "F:/y1/day01/s2.py", line 3, in <module>
for i in dic.keys():
RuntimeError: dictionary changed size during iteration
字典排序
dic={'a': 64, 'c': 54, 'b': 65}
s=list(sorted(dic.items(),key=lambda a:a[1],reverse=True))
print(dict(s))
dic=[{'name': 64}, {'name': 54},{ 'name': 65}]
s1=list(sorted(dic,key=lambda a:a['name']))
print(s1)