字典
#update方法,一个字典可以被合并到另一个字典中去:
d1={1:'a',2:'b'}
d1.update({3:'c',4:'d'})
d1
dict(zip(range(4),reversed(range(5))))
d1.get(1)
默认值!!
1.
一个常见的逻辑:
if key in some_dict:
value=some_dict[key]
else:
value=default_value
#可以简化成
value=some_dict.get(key,default_value)
2.
words={'apple','bat','bar','atom','book','momo'}
by_letter={}
for word in words:
letter=word[0]
if letter not in by_letter:
by_letter[letter]=[word]
else:
by_letter[letter].append(word)
by_letter
{'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book'], 'm': ['momo']}
#利用setdefault方法,让上面的if-else块可以写成:
by_letter.setdefault(letter,[]).append(word)
#还有简化方法collection模块中的一个defaultdict的类
from collections import defaultdict
by_letter=defaultdict(list)
for word in words:
by_letter[word[0]].append(word)
by_letter
defaultdict(list,
{'a': ['apple', 'atom'],
'b': ['bat', 'bar', 'book'],
'm': ['momo']})
defaultdict的初始化器只需要一个可调用对象(例如各种函数),并不需要明确的类型。因此,如果要将默认值设置为4,只需要传入一个能够返回4的函数即可:
counts=defaultdict(lambda:4)
counts
defaultdict(<function __main__.<lambda>>, {})
字典的哈希性
虽然字典的值是可以是任何Python对象,但键必须是不可变对象,这里描述为可哈希性,可以用hash函数来验证
hash('string')
-9167918882415130555
hash([13,3])#列表是可以变的,如果一定要用列表,就转变它为元组
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-20-d7b46a358c61> in <module>()
----> 1 hash([13,3])#列表是可以变的,如果一定要用列表,就转变它为元组
TypeError: unhashable type: 'list'

781

被折叠的 条评论
为什么被折叠?



