字典定义语法:
{元素1, 元素2, … , 元素n}
其中每一个元素是一个“键值对”——键:值 (key:value)
大括号{} 把所有元素绑在一起
逗号, 将每个键值对一一分开
分号; 将键和值分开
创建字典的例子如下:
d = {
'A' : '1',
'B' : '2',
'C' : '3',
'D' : '4',
'E' : '5'
}
print( d, type(d) )
运行后
{'A': '1', 'B': '2', 'C': '3', 'D': '4', 'E': '5'} <class 'dict'>
内置方法
字典里最常用的三个内置方法就是keys(), values()和items(),分别是获取字典的键、值、对。
print(list(d.keys()), '\n')
print(list(d.values()), '\n')
print(list(d.items()))
运行后
['A', 'B', 'C', 'D', 'E']
['1', '2', '3', '4', '5']
[('A', '1'), ('B', '2'), ('C', '3'), ('D', '4'), ('E', '5')]
添加
比如加一个“F:6”
d['F'] = '6'
运行后
{'A': '1', 'B': '2', 'C': '3', 'D': '4', 'E': '5', 'F': '6'}
获取
两者都可以
print( d['B'] )
print( d.get('B') )
更新
d['C'] = '33'
运行后
{'A': '1', 'B': '2', 'C': '33', 'D': '4', 'E': '5'}
删除
del d['D']
# 或像列表里的 pop() 函数,删除行业 (industry) 并返回出来。
d.pop('D')
运行后
{'A': '1', 'B': '2', 'C': '3', 'E': '5'}
不可更改键
字典里的键是不可更改的,因此只有那些不可更改的数据类型才能当键,比如整数 (虽然怪怪的)、浮点数 (虽然怪怪的)、布尔 (虽然怪怪的)、字符、元组 (虽然怪怪的),而列表却不行,因为它可更改。看个例子
d = {
2 : 'integer key',
10.31 : 'float key',
True : 'boolean key',
('OK',3) : 'tuple key'
}
print( d )
运行后
{2: 'integer key', 10.31: 'float key', True: 'boolean key', ('OK', 3): 'tuple key'}
虽然怪怪的,但这些 2, 10.31, True, (‘OK’, 3) 确实能当键。有个地方要注意下,True 其实和整数 1 是一样的,由于键不能重复,当你把 2 该成 1时,你会发现字典只会取其中一个键,示例如下:
d = {
1 : 'integer key',
10.31 : 'float key',
True : 'boolean key',
('OK',3) : 'tuple key'
}
print( d )
运行后
{1: 'boolean key', 10.31: 'float key', ('OK', 3): 'tuple key'}
那么如何快速判断一个数据类型 X 是不是可更改的呢?两种方法:
- 麻烦方法:用 id(X) 函数,对 X 进行某种操作,比较操作前后的 id,如果不一样,则 X 不可更改,如果一样,则 X 可更改。
- 便捷方法:用 hash(X),只要不报错,证明 X 可被哈希,即不可更改,反过来不可被哈希,即可更改。
先看用 id() 函数的在整数 i 和列表 l 上的运行结果:
i = 1
print( id(i) )
i = i + 2
print( id(i) )
运行后
1607630928
1607630992
l = [1, 2]
print( id(l) )
l.append('Python')
print( id(l) )
运行后
2022027856840
2022027856840
- 整数 i 在加 1 之后的 id 和之前不一样,因此加完之后的这个 i (虽然名字没变),但是不是加前的那个 i 了,因此整数是不可更改的。
- 列表 l 在附加 ‘Python’ 之后的 id 和之前一样,因此列表是可更改的。
先看用 hash() 函数的在字符 s,元组 t 和列表 l 上的运行结果:
hash('Name')
运行结果为:7230166658767143139
hash( (1,2,'Python') )
运行结果为:3642952815031607597
hash( [1,2,'Python'] )
运行结果为:TypeError: unhashable type: ‘list’
字符 s 和元组 t 都能被哈希,因此它们是不可更改的。列表 l 不能被哈希,因此它是可更改的。