字典就是映射,由key(键)到value(值)的映射,通俗点就是列表的index换成了key。
字典用大括号{ }定义,由key和value共同构成。
NOTE:value可以取不可变的任何数据类型。
#字典的创建和访问
>> dict1 = {'lzm':'handsome', '吕zm':'帅', '吕治珉':'英俊'}
>>> dict1
{'lzm': 'handsome', '吕zm': '帅', '吕治珉': '英俊'}
>>> dict1['lzm']
'handsome'
>>> dict1[1]
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
dict1[1]
KeyError: 1
#字典的下标只能是key,不再是自然数
>>> for i in dict1:
print(i, end = ' ')
lzm 吕zm 吕治珉
#遍历字典的内容是key
>>> dict2 = {}
>>> dict2
{}
>>> type(dict2)
<class 'dict'>
#可直接用大括号声明一个空字典
#用dict()内置函数来创建字典
>>> dict2 = dict((('a', 1), ('b', 2), ('c', 3), ('d', 4))) #参数是一个元组
>>> dict2
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>> dict2 = dict(a=1, b=2, c=3, d=4) #key不能加表示字符串的引号,貌似key不能是数字?
>>> dict2
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
#修改和创建
>>> dict2 = dict(a=1, b=2, c=3, d=4)
>>> dict2['a']
1
>>> dict2['a'] = 100 #修改
>>> dict2
{'a': 100, 'b': 2, 'c': 3, 'd': 4}
>>> dict2['e'] = 99 #创建
>>> dict2
{'a': 100, 'b': 2, 'c': 3, 'd': 4, 'e': 99}
#五种创建字典的方法
>>> d1 = dict(a = 1, b = 2, c = 3)
>>> d2 = dict(zip(['a', 'b', 'c'], [1, 2, 3]))
>>> d3 = dict([('a', 1), ('b', 2), ('c', 3)])
>>> d4 = dict({'a':1, 'b':2, 'c':3})
>>> d5 = {'a':1, 'b':2, 'c':3}
>>> d1 == d2 == d3 == d4 == d5
True
NOTE:key必须是不同的(类似于数学上函数的自变量),value可以相同,如果一个key被赋值两次,则后一次会被记住。
>>> dict1 = {'lzm':'handsome', '吕zm':'帅', '吕治珉':'英俊', 'lzm':'帅惨了'}
>>> dict1
{'lzm': '帅惨了', '吕zm': '帅', '吕治珉': '英俊'}
NOTE:key必须不可变,所以可以用数值,字符串,元组来充当,不能使用列表。
NOTE:和序列不同,字典不支持拼接和重复操作。
字典的各种内置方法:
# fromkeys(seq[,value]),创建并返回一个新字典,包含两个参数,第一个是key;第二个是可选的,是传入key对应的value,如果不提供则默认为None
>>> d1 = {}
>>> d1.fromkeys((1,2,3)) #d1仍然是空字典
{1: None, 2: None, 3: None}
>>> d1
{}
>>> d2 = {}
>>> d2.fromkeys((1,2,3), 'number')
{1: 'number', 2: 'number', 3: 'number'}
>>> d3 = {}
>>> d3.fromkeys((1,2,3), ('a','b','c')) #将('a','b','c')作为了一个整体
{1: ('a', 'b', 'c'), 2: ('a', 'b', 'c'), 3: ('a', 'b', 'c')}
# keys(), values(), items()
>>> d1 = {}
>>> d1.fromkeys(range(10), '帅')
{0: '帅', 1: '帅', 2: '帅', 3: '帅', 4: '帅', 5: '帅', 6: '帅', 7: '帅', 8: '帅', 9: '帅'}
>>> d1 = d1.fromkeys(range(10), '帅')
>>> d1.keys()
dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> d1.values()
dict_values(['帅', '帅', '帅', '帅', '帅', '帅', '帅', '帅', '帅', '帅'])
>>> d1.items()
dict_items([(0, '帅'), (1, '帅'), (2, '帅'), (3, '帅'), (4, '帅'), (5, '帅'), (6, '帅'), (7, '帅'), (8, '帅'), (9, '帅')])
# get(key[,default]),查找字典中是否存在某个key,如果不存在就默认返回None
>>> d1 = {}
>>> d1 = d1.fromkeys(range(10), '帅')
>>> d1.get(9)
'帅'
>>> d1.get(10)
>>>
>>> d1.get(10, '没有')
'没有'
>>> 9 in d1
True
>>> 10 in d1
False
# clear()
>>> d1 = {}
>>> d1 = d1.fromkeys(range(10), '帅')
>>> d1.clear()
>>> d1
{}
# copy()
>>> d1 = {}
>>> d1 = d1.fromkeys(range(10), 'a')
>>> d2 = d1.copy()
>>> d1
{0: 'a', 1: 'a', 2: 'a', 3: 'a', 4: 'a', 5: 'a', 6: 'a', 7: 'a', 8: 'a', 9: 'a'}
>>> d2
{0: 'a', 1: 'a', 2: 'a', 3: 'a', 4: 'a', 5: 'a', 6: 'a', 7: 'a', 8: 'a', 9: 'a'}
>>> id(d1)
2665210978496
>>> id(d2)
2665176809408
# pop(key[,default]),给定key弹出对应的value; popitem(),弹出末尾项
>>> d = dict([(1,'a'), (2,'b'), (3,'c')])
>>> d
{1: 'a', 2: 'b', 3: 'c'}
>>> d.pop(2)
'b'
>>> d
{1: 'a', 3: 'c'}
>>> d.popitem()
(3, 'c')
>>> d
{1: 'a'}
# setdefault(key[,default]),和get()相似,但如果找不到对应的key会自动添加
>>> d = {1:'a', 2:'b', 3:'c'}
>>> d.setdefault(3)
'c'
>>> d.setdefault(4)
>>> d
{1: 'a', 2: 'b', 3: 'c', 4: None}
>>> d.setdefault(5, 'e')
'e'
>>> d
{1: 'a', 2: 'b', 3: 'c', 4: None, 5: 'e'}
# update([other]),更新字典,貌似只能更新key为字符的情况?
>>> d = dict(a=1, b=2, c=3)
>>> d
{'a': 1, 'b': 2, 'c': 3}
>>> d.update(c=4) #key不能加引号
>>> d
{'a': 1, 'b': 2, 'c': 4}