简介
键值对的集合,键必须是唯一且互不相同的,非可哈希的值如:列表、字典或其它可变类型的值不可作为键。字典的主要操作是依据键来存储和析取值。
字典操作
创建字典
1. {} 创建
# 创建一个空字典
d = {}
# 创建字典
d = {'name': 'zs'}
2. 字典推导式创建
{k: v for k, v in zip(['name', 'age'], ['zs', 10])}
# {'name': 'zs', 'age': 10}
3. 字典类型构造器创建
d = dict()
#{}
d = dict(name='zs')
#{'name': 'zs'}
d = dict([('name', 'zs')])
#{'name': 'zs'}
4. fromkeys创建
格式:
dict.fromkeys(iterable, value=None, /)
创建一个新字典,以序列iterable中元素作为字典的键,value为字典所有键的初始值;
- iterable:字典键序列
- value: 字典初始值;可选;默认为None
例子:
d = dict.fromkeys(['name', 'age', 'sex'])
# {'name': None, 'age': None, 'sex': None}
查询
1. 通过key查询
格式:
d[key]
通过key查找对应的值;如果不存在则会引发KeyError异常;
如果字典的子类定义了方法__missing__(),并且 key 不存在,则 d[key] 操作将调用该方法并附带键 key 作为参数。d[key] 随后将返回或引发 __missing__(self, key) 调用所返回 或 引发的任何对象或异常。
如果键不存在,且未定义__missing__(),则会引发KeyError。__missing__()必须是一个方法;
例子:
class Counter(dict):
def __missing__(self, key):
return 0
c = Counter()
c['red']
#0
c['red'] + 1
#1
2. get
格式:
d.get(key, default=None, /)
如果key存在于字典中,则返回key的值;否则则返回default;如果default未给,默认值为None;不会引发KeyError异常;
例子:
d = {'name': 'zs'}
d.get('name')
#'zs'
d.get('age')
#None
3. setdefault
格式:
dict.setdefault(key, default=None, /)
如果key存在,则返回它的值。如果不存在,插入键并将其值设置为default,并返回default。default默认为None
- key:键
- default:键不存在时,设置的默认值
例子:
>>> d = {'name': 'zs'}
>>> d.setdefault('age', 10)
10
>>> d
{'name': 'zs', 'age': 10}
4. items
格式:
d.items()
返回由字典项组成的视图对象。类型为:dict_items;该对象提供字典条目的动态视图,字典改变时。视图也会相应的改变;
视图对象不是列表,不支持索引,可以使用list()转换为列表;也不能对视图对象进行任何修改,因为字典的视图对象都是只读的
例子:
d = {'name': 'zs'}
# dict_items([('name', 'zs')])
5. keys
格式:
d.keys()
返回由字典键组成的新视图;
例子:
d = {'name': 'zs'}
# dict_keys(['name'])
6. values
格式:
d.values()
返回由字典值组成的新视图
例子:
d = {'name': 'zs'}
d.values()
# dict_values(['zs'])
更新字典
1. key更新
格式:
d[key] = value
将key的值设置为value
例子:
d = {'name': 'zs'}
d['name'] = 'ls'
# {'name': 'ls'}
2. update
格式:
d.update([other])
使用来自于other的键值对更新字典,覆盖原有的键;返回None;update接受另一个字典对象,或包含键/值对的可迭代对象
例子:
d = {'name': 'zs'}
d.update({'name': 'ls', 'age': 10})
# {'name': 'ls', 'age': 10}
d.update([('addr', '上海')])
# {'name': 'ls', 'age': 10, 'addr': '上海'}
d.update(color='red')
# {'name': 'ls', 'age': 10, 'addr': '上海', 'color': 'red'}
key是否存在
1. in
格式:
x in d
判断字典d是否存在键 x ,如果存在返回True,反之返回False
例子:
d = {'name': 'zs'}
print('name' in d)
#True
2. not in
格式:
x not in d
等价于 not x in d
例子:
d = {'name': 'zs'}
print('name' not in d)
#False
删除
1. clear
格式:
d.clear()
清空字典
例子:
d = {'name': 'zs'}
d.clear()
# {}
2. del
格式:
del d[key]
del d
删除字典中特定key或整个字典
例子:
d = {'name': 'zs'}
#删除特定key
del d['name']
#删除整个字典
del d
3. pop
格式:
d.pop(key[, default])
如果key存在字典中,则将其移除并返回其值,否则返回default。如果default未给出且key不存在于字典中,触发KeyError异常;
例子:
>>> d = {'name': 'zs'}
>>> d.pop('name')
'zs'
>>> d.pop('name')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'name'
>>> d.pop('name', None)
>>>
4. popitem
格式:
d.popitem()
从字典中移除并返回一个键值对。键值对按照LIFO的顺序被返回
例子:
>>> d = {'name': 'zs'}
>>> d['age'] = 10
>>> d.popitem()
('age', 10)
>>> d.popitem()
('name', 'zs')
统计字典键值对个数
格式:
len(d)
统计字典键值对个数
例子:
d = {'name': 'zs'}
len(d)
# 1