关于字典
- 字典是通过键来索引的。
- 因为字典按键索引,所以无所谓顺序。
- 字典的键不能重复。
- 可以通过键改变该键对应的值,如果键不存在,则在字典最后创建这个键值对。
- 字典与序列一样,使用赋值号直接赋值只是创建了一个引用。
- 字典的键与值都可以是一个函数(Python 字典比 JavaScript 的对象还要强大)
- 只有不可变类型的变量可以作为字典的键,举个例子:元组和字符串可以作为字典的键,但列表不可以。
- 判断某个键是否存在:
键 in 字典
创建字典
字典名 = {key1: value1, key2: value2, key3: value3}
或
li = [[1, 2], [3, 4], [5, 6]] # 这种序列叫做 双值子序列
d = dict(li)
print(d) # output: {1: 2, 3: 4, 5: 6}
可以对任何包含双值子序列的序列使用 dict()
其他双值子序列的例子:
[ ('a', 'b'), ('c', 'd'), ('e', 'f') ]
( ['a', 'b'], ['c', 'd'], ['e', 'f'] )
[ 'ab', 'cd', 'ef' ]
[[1, 2], (3, 4), '56']
使用 zip()
函数可以很方便地创建双值子序列。
字典常用内置方法
字典名.get(key)
:功能与[]
索引相似,只是用[]
获取不存在的键会抛出异常,但若使用get
方法,当key
不存在于字典中时,或返回None
字典名.keys()
:返回一个对象,里面包含该字典所有的键字典名.values()
:返回一个对象,里面包含该字典所有的值字典名.items()
:返回一个对象,里面包含该字典所有的键和值,可以用list()
转换成 双值子序列字典2 = 字典1.copy()
:复制字典字典1.update(字典2)
:将 字典2 合并到 字典1,如果有相同的键,新值会覆盖原来的值字典名.fromkeys(列表或元组[,值])
,值默认为None
。该方法的用法:先创建一个空字典,配合range()
为字典添加元素。字典名.clear()
:清除所有元素
字典推导式
语法与列表推导式相似,只是表达式是一个键值对,且使用大括号,下面是一个简单的例子:
dic = {num:num for num in range(3)}
print(dic) # output: {0: 0, 1: 1, 2: 2}
对单词中的字母计数,并返回字典形式的计数结果:
word = 'letters'
letter_counts = {letter: word.count(letter) for letter in set(word)}
print(letter_counts) # output: {'t': 2, 'l': 1, 'e': 2, 'r': 1, 's': 1}
底层实现原理
Reference: