dict(字典)可能是Python内建数据结构中最为重要的。
dict_1 = {}
dcit_2 = {'a':'some value','b':'[1,2,3,4]'}
words = ['apple','banana','abandon','extend','cba']
访问或设置字典中的元素,与列表和元组的方法一样。
dict_2[2] = 'extend'#dict_2={'a':'some value','b':'[1,2,3,4]',2:c}
dict_2['a']#返回some value
可以用像列表或元组一样的方法来判断是否存在一个这样的键
‘a’ in dict_2#返回True
可以使用del关键字或pop方法删除值,pop方法会在删除的同时返回被删除的值。
字典中的keys方法和values方法会分别返回字典键和值的迭代器:
list(dict_2.keys())=['a','b',2]
list(dict_2.values())=['some value','[1,2,3,4]','extend']
从序列生成字典:
字典本质是二元组的集合,字典是可以接受一个2-元组的列表最为参数的:
mapping = dict(zip(range(5),reversed(range(5))))#返回{0:4,1:3,2:2,3:1,4:0}
默认值(default):
get()方法
value = some_dict.get(key,default_value) 会在key参数不是字典键时返回None
setdefualt()方法:
与get()方法相似但当key在字典中不存在时会创建一个key的键并将default_value的付给它。
内建模块中有一个非常有用的类,defaultdict。是一个在各位置上生成默认值的函数。‘
如将列表words中的元素按首字母分类的包含列表的字典。
用setdefault方法实现:
by_letter = {}
for word in words:
letter = word[0]
by_letter.setdefault(letter,[]).append(word)
用defaultdict实现:
for collections import defaultdict
by_letter= defaultdict(list)
for word in words:
by_letter[word[0]].apend(word)
有效的键类型:
字典的值可以是任何python对象,当键必须是不可变的对象。比如标量类型(整数,浮点数,字符串)或元组(且元组内对象也必须是不可变对象,不能包含列表)
可以通过hash函数可以检查一个对象是否可以哈希化(作为字典的值)。
hash('string')#返回5023931462650008331
为了将列表作为键可以将其转化为元组,而元组内部元素都可以哈希化,则他自己也可以哈希化
d= {}
d[tuple([1,2,3])]=5#返回[(1,2,3):5]