字典是一种通过名字或者关键字引用的得数据结构,key类型需要时被哈希,其键可以是数字、字符串、元组,这种结构类型也称之为映射。字典类型是Python中唯一內建的映射类型。
注意,浮点数比较很不精确,因此千万不要用浮点数作为key!
一、字典的键不能是list类型:
list=[1,2,3,4]
info2={list:'number'}
结果:
Traceback(mostrecentcalllast):
File"D:/字典.py",line2,in
info2={list:'number'}
TypeError:unhashabletype:'list'
二、list/set/dict均不可被哈希,int、float、str、tuple:是可以哈希的
1list.__hash__;
#结果为None
2set.__hash__;
#结果为None
3dict.__hash__;
#结果为None
4print(int.__hash__);
#
5print(float.__hash__);
#
6print(str.__hash__);
#
7print(tuple.__hash__);
#
三、增
info={'name':'jamnes','age':'32','work':'basketplayer'}
info['sex']='fale'
print(info)
结果:
{'name':'jamnes','age':'32','work':'basketplayer','sex':'fale'}
四、删
4-1pop():删除指定key的键值对
nfo={'name':'jamnes','age':'32','work':'basketplayer'}
info.pop('work')
print(info)
结果:
{'name':'jamnes','age':'32'}
4-2clear():清除所有的键值对
info={'name':'jamnes','age':'32','work':'basketplayer'}
info.clear()
print(info)
结果:
{}
4-3setdefault():删除指定的元素,如果没有,则返回none
info={'name':'jamnes','age':'32','work':'basketplayer'}
info.setdefault('son')
print(info)
结果:
None
五、改
info={'name':'jamnes','age':'32','work':'basketplayer'}
info['age']='33'
print(info)
结果:
{'name':'jamnes','age':'33','work':'basketplayer'}
六、查
6-1get():通过给定的key,查找对应的value,如果给定的可以在字典中无,则返回None
info={'name':'jamnes','age':'32','work':'basketplayer'}
a=info.get('age')
print(a)
结果:
32
6-2setdefault():通过给定的key,查找对应的value,如果给定的可以在字典中无,则返回None,
同时在字典中增加'test':None键值对
info={'name':'jamnes','age':'32','work':'basketplayer'}
a=info.setdefault('age')
print(a)
print(info)
b=info.setdefault('sex')
print(b)
print(info)
结果:
32
{'name':'jamnes','age':'32','work':'basketplayer'}
None
{'name':'jamnes','age':'32','work':'basketplayer','sex':None}
七、更新
7-1update()=
一,更新里面有的信息,就是改变
info={'name':'jamnes','age':'32','work':'basketplayer'}
info2={'name':'wade','age':'33','work':'basketplayer'}
info.update(info2)
print(info)
结果:
{'name':'wade','age':'33','work':'basketplayer'}
二,更新里面没有的信息,就是添加
info={'name':'jamnes','age':'32','work':'basketplayer'}
info2={'honor':'3champions'}
info.update(info2)
print(info)
结果:
{'name':'jamnes','age':'32','work':'basketplayer','honor':'3champions'}
八、返回键,值,键值对
keys():以列表(list)返回字典中的所有键(key),字典是无序的,所以这个list返回的不是定义字典的顺序
values():以列表(list)返回字典中的所有值,这个list的顺序跟keys()返回的list顺序是一一对应的
items():以列表(list)返回可遍历的(键,值)元组数组,这个tuple的list包含了dictionary的所有数据
dict={'k1':'v1','k2':'v2','k3':'v3'}
#1,请循环遍历除所有的key
forkeysindict.keys():
print(keys)
#遍历出所有的value
forvalueindict.values():
print(value)
#遍历出
forkey,valueindict.items():
print(key+':'+value)
#结果:
k1
k2
k3
v1
v2
v3
k1:v1
k2:v2
k3:v3
九、练习字典
dic={'k1':"v1","k2":"v2","k3":[11,22,33]}
a.请循环输出所有的key
b.请循环输出所有的value
c.请循环输出所有的key和value
d.请在字典中添加一个键值对,"k4":"v4",输出添加后的字典
e.请在修改字典中“k1”对应的值为“alex”,输出修改后的字典
f.请在k3对应的值中追加一个元素44,输出修改后的字典
g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典
dic={'k1':"v1","k2":"v2","k3":[11,22,33]}
#a.请循环输出所有的key
foriindic:
print(i)
foriindic.keys():
print(i)
#b.请循环输出所有的value
foriindic.values():
print(i)
c.请循环输出所有的key和value
fori,jindic.items():
print(i,j)
#d.请在字典中添加一个键值对,"k4":"v4",输出添加后的字典
dic2={'k4':'v4'}
dic.update(dic2)
print(dic)
dic['k4']='v4'
print(dic)
#e.请在修改字典中“k1”对应的值为“alex”,输出修改后的字典
dic['k1']='alex'
print(dic)
f.请在k3对应的值中追加一个元素44,输出修改后的字典
dic['k3'].append(44)
print(dic)
#g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典
dic['k3'].insert(0,18)
print(dic)
十、根据字典的键值进行排序
反序:reverse=True
mylist=['学习','工作','玩耍','学习','工作','工作']
print(mylist)
#list_element是另外一个列表,里面的内容是list_element里面的无重复项
myset=set(mylist)
mydict={}
foriteminmyset:
res=mylist.count(item)
sample={item:res}
#print(res)
#print("the%dhasfound%d"%(item,mylist.count(item)))
mydict.update(sample)
print(mydict)
print(sorted(mydict.items(),key=lambdamydict:mydict[1],reverse=True))
十一、OrderedDict的使用
在Python中,dict这个数据结构由于hash的特性,是无序的,这在有时候会给我们带来一些麻烦,幸运的时,在collections模块中为我们提供了OrderedDict,当你需要获取一个有序的字典对象时,试用它即可。
python中的字典(dict)对象可使用“键”,“值”对的形式存取值,但默认的内置类型字典中的元素是无序的。Collections模块下的OrderedDict类实现了对字典的排序,OrderedDict是dict的一个子类,实现了对字典排序的功能,下面看一下两者数据类型的对比。
fromcollectionsimportOrderedDict
print('NormalDictionary:')
d={}
d['name']='v1'
d['age']='v2'
d['job']='v3'
d['address']='v4'
d1={}
d1['job']='v3'
d1['address']='v4'
d1['name']='v1'
d1['age']='v2'
print(d)
print(d1)
print(d==d1)
print('OrderedDict:')
d2=OrderedDict()
d2['name']='v1'
d2['age']='v2'
d2['job']='v3'
d3=OrderedDict()
d3['job']='v3'
d3['age']='v2'
d3['name']='v1'
print(d2)
print(d3)
print(d2==d3)
输出结果:
NormalDictionary:
{'name':'v1','age':'v2','job':'v3','address':'v4'}
{'job':'v3','address':'v4','name':'v1','age':'v2'}
True
OrderedDict:
OrderedDict([('name','v1'),('age','v2'),('job','v3')])
OrderedDict([('job','v3'),('age','v2'),('name','v1')])
False
从结果来看,如果是普通的字典,即使传入的顺序不一样,但是依然是相同的字典;如果是OrderedDict,传入的顺序不一样,那么得到的字典是不一样的。
以上内容为大家介绍了python字典操作方法详解,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。