数据类型-字典
字典
也是python最常用的数据类型之一,不同与list
或者str
,字典的定义是以键值对
,键和值之间用:
分隔,多个键值对用 ,
分隔,键
通常是由不可变类型
,列表
不可以作为键,创建的方式是以一对{}
。
1. 特点
-
字典中的键是唯一的
: 如果由重复,后面的键会覆盖之前的 python3.6以前字段是无序的,3.6之后是有序的
字典不支持索引切片
字典为可变类型
示例
# 创建有值的字典
dict1 = {'name': 'Tom', 'age': 20, 'gender': 'male'}
dict2 = dict(name='tome',age=20, gender='male')
# 空字典
dict3 = {}
dict4 = dict()
一般称冒号前面的为键(key)
,简称k
;冒号
后面的为值(value)
,简称v
。
2. 字典的常见操作
2.1 增
字典
中的增
就是为字典添加键值对
,
语法
字典序列[key] = 值
如果key存在
则修改这个key对应的值
;如果key不存在
则新增此键值对
示例
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
dict1['name'] = 'Rose'
print(dict1)
# 结果:{'name': 'Rose', 'age': 20, 'gender': '男'}
dict1['id'] = 110
print(dict1)
# {'name': 'Rose', 'age': 20, 'gender': '男', 'id': 110}
3.2 删
del:删除字典或删除字典中指定键值对
示例
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
del dict1['gender']
print(dict1)
# 结果:{'name': 'Tom', 'age': 20}
-
clear()
:清空字典
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
dict1.clear()
print(dict1)
# 结果: {}
3.3 改
语法
字典序列[key] = 值
如果key存在
则修改这个key对应的值
;如果key不存在
则新增此键值对
3.4 查
3.4.1 按 key 查找
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
print(dict1['name'])
# 结果: Tom
print(dict1['id'])
# 结果: 报错
如果key
不存在字典中,程序抛出异常KeyError: key
3.4.2 get()
语法
字典序列.get(key, 默认值)
如果当前查找的key不存在
则返回第二个参数(默认值)
,如果省略第二个参数
,则返回None
,这样的好处是程序不会抛异常
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
print(dict1.get('name'))
# 结果: Tom
print(dict1.get('id', 110))
# 结果: 110
print(dict1.get('id'))
# 结构: None
3.4.3 keys()
语法
字典序列.keys()
示例
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
print(dict1.keys())
# 结果: dict_keys(['name', 'age', 'gender'])
多搭配循环使用, 返回一个list
, 里面存放的是当前dict
的所有kkey
3.4.4 values()
语法
字典序列.values()
示例
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
print(dict1.values())
# 结果: dict_values(['Tom', 20, '男'])
多搭配循环使用, 也是返回一个list
, 里面存放的是当前dict
的所有value
3.4.5 items()
语法
字典序列.items()
示例
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
print(dict1.items())
# 结果: dict_items([('name', 'Tom'), ('age', 20), ('gender', '男')])
多搭配循环使用,返回也是一个list
, 里面是以元祖
的形式存放dict
的key
和value
4.常见的集中字典循环遍历
4.1 遍历字典中的 key
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
for key in dict1.keys():
print(key)
4.2 遍历字典的value
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
for value in dict1.values():
print(value)
4.3 遍历字典的元素
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
for key, value in dict1.items():
print(f'{key} = {value}')
5. defaultdict
defaultdict
是 collections
模块对字典类型的补充,它可以给字典的值设置一个类型,在使用原生字典dict时, d[key]
获取value
的时候,如果key
不存在,程序抛出异常,KeyError异常
使用 defaultdict
,只要你传入一个默认的工厂方法
,当获取不存在的key时, 便会调用这个工厂方法使用其结果来作为这个key的默认值
示例
from collections import defaultdict
d = {}
# print(d['a'])
# 结果:KeyError: 'a'
dd = defaultdict(lambda: 'aaa')
print(dd['key'])
# 结果:aaa
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
d[k].append(v)
print(d)
# 结果:defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]})
6. OrderedDict
python3.6以前字典是无序的,collection
模块中OrderedDict
是针对这一问题的补充,它可以为我们创建有序字典
示例
from collections import OrderedDict
d = {'a': 3, 'b': 2, 'c': 1}
dd = OrderedDict(a=1, b=2, c=3)
for k, v in d.items():
print(k, v)
"""
a 3
c 1
b 2
"""
for k, v in dd.items():
print(k, v)
"""
a 1
b 2
c 3
"""
from collections import OrderedDict
items = (
('a', 3),
('b', 2),
('c', 1)
)
regular_dict = dict(items)
ordered_dict = OrderedDict(items)
for k, v in regular_dict.items():
print(k, v)
"""
c 1
a 3
b 2
"""
for k, v in ordered_dict.items():
print(k, v)
"""
b 2
c 3
a 1
"""
如果原生的字典也是有序的,请注意当前python
版本
6.1 其他方法
move_to_end(key, last=True)
:
将现有key
移动到有序字典的任一端
。 如果last
为True
值(默认)则将元素移至末尾
;如果last
为False
值则将元素移至开头
。如果key不存在
则会触发KeyError
示例
d = OrderedDict.fromkeys('abcde')
d.move_to_end('b')
print(' '.join(d.keys()))
# 结果: acdeb
d.move_to_end('b', last=False)
print(' '.join(d.keys()))
#结果: bacde
popitem(last=True)
:
有序字典的popitem()
方法移除并返回一个 (key, value) 键值对。 如果last
值为Tru
,则按后进先出
的顺序返回键值对,否则就按先进先出
的顺序返回键值对。
示例
dd = OrderedDict(a=1, b=2, c=3)
data = dd.popitem()
print(data)
# 结果:('c', 3)
data = dd.popitem(last=False)
print(data)
# 结果: ('a', 1)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。