字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。
理解字典的最佳方式是把它看做无序的键: 值对 (key:value 对)集合,键必须是互不相同的(在同一个字典之内)。一对大括号创建一个空的字典: {} 。
字典的两大特点:无序,键唯一
字典的输出是无序的,顺序不固定
字典的表示形式:
{'guido': 4127, 'jack': 4098, 'sape': 4139}
字典的key必须是不可变的数据类型,比如整型,字符串,元组。
1.创建
dict() 构造函数可以直接从 key-value 对中创建字典:
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) {'sape': 4139, 'jack': 4098, 'guido': 4127}
字典推导式可以从任意的键值表达式中创建字典:
>>> {x: x**2 for x in (2, 4, 6)} {2: 4, 4: 16, 6: 36}
如果关键字都是简单的字符串,有时通过关键字参数指定 key-value 对更为方便:
>>> dict(sape=4139, guido=4127, jack=4098) {'sape': 4139, 'jack': 4098, 'guido': 4127}
2.增和改
setdefault方法若键不存在,增加相应的键值对,并返回对应的值;若键已存在,则不改动,返回字典中相应的键对应的值
1 dic = {'name': 'chen','age': '22'} 2 dic['name'] = 'chen' 3 dic['age'] = '22' 4 print(dic) 5 6 a = dic.setdefault('name', 'liu') 7 b = dic.setdefault('sex', 'male') 8 print(a, b) 9 print(dic)
输出为
{'name': 'chen', 'age': '22'} chen male {'name': 'chen', 'sex': 'male', 'age': '22'}
改值的话与赋值相同,若相应的key已有对应值,后来的会覆盖前边的值。
使用update()方法修改
1 f = {'age': '22', 'name': 'chen', 'sex': 'male'} 2 g = {'age': 100,'hobby':'girl'} 3 f.update(g) 4 print(f)
输出为
{'age': 100, 'hobby': 'girl', 'sex': 'male', 'name': 'chen'}
3.查
print('name' in dic) #判断相应的key在不在字典中 print(dic.get('name')) #查找相应key对应的值,不存在返回None dic.get('name', 'liu') # 不存在则返回'liu',存在则返回相应的值 print(dic['name']) #查找相应key对应的值,不存在则会报错
输出
True
chen
chen
keys()方法输出字典里所有的key
values()方法输出字典里所有的值
items()方法输出字典里所有的键值对
三者输出的值都是特殊格式的,可以用list()命令转化为列表
1 print(dic.keys()) 2 print(dic.values()) 3 print(dic.items()) 4 print(list(dic.items()))
输出为
1 dict_keys(['sex', 'age', 'name']) 2 dict_values(['male', '22', 'chen']) 3 dict_items([('sex', 'male'), ('age', '22'), ('name', 'chen')]) 4 [('sex', 'male'), ('age', '22'), ('name', 'chen')]
4.删
del 方法删除指定的键值对
popitem()方法随机删除一个键值对,并返回删除的键值对
pop() 方法删除指定的key的键值对,并返回相应的值
1 a = dic.popitem() 2 print(a, dic) 3 print(dic.pop('name')) 4 print(dic)
当popitem()删除的不是'name'时
('sex', 'male') {'age': '22', 'name': 'chen'} chen {'age': '22'}
clear()方法清空字典
5.其他操作
字典的嵌套与列表相似,也使用多个[]来表示
dict.formkeys()方法建立一个字典
d1 = dict.fromkeys(['host1', 'host2', 'host3'], 'win') print(d1) d1['host1'] = 'app' print(d1) d2 = dict.fromkeys(['host1', 'host2', 'host3'], ['win', 'mac']) print(d2) d2['host1'][0] = 'app' print(d2)
输出为
{'host1': 'win', 'host3': 'win', 'host2': 'win'} {'host1': 'app', 'host3': 'win', 'host2': 'win'} {'host1': ['win', 'mac'], 'host3': ['win', 'mac'], 'host2': ['win', 'mac']} {'host1': ['app', 'mac'], 'host3': ['app', 'mac'], 'host2': ['app', 'mac']}
sorted(dict)返回一个有序的包含字典中所有key的列表
f = {'age': '22', 'name': 'chen', 'sex': 'male'} print(sorted(f))
输出为
['age', 'name', 'sex']
字典的遍历,用for循环实现
1 f = {'age': '22', 'name': 'chen', 'sex': 'male'} 2 3 for i in f: 4 print(i, f[i]) 5 for items in f.items(): 6 print(items) 7 for keys, values in f.items(): 8 print(keys, values)
输出为
1 age 22 2 name chen 3 sex male 4 ('age', '22') 5 ('name', 'chen') 6 ('sex', 'male') 7 age 22 8 name chen 9 sex male
特殊地:格式化字符串操作
'%(name)s:%(score)s' % {'score':9.5, 'name':'newsim'}
这种形式只用在要输出的内容为dictionary(一种python格式化的数据类型)时,小括号中的(name)和(score)对应于后面的键值对中的键。
输出为
newsim: 9.5