字典 dict
什么是字典
字典是一种可变的容器,可以存储任意类型的数据字典中的每一个数据都是用'键'进行索引的,而不像序列可以用下表(index)来进行索引
字典中的数据没有先后顺序关系,字典的存储是无序的
字典中的数据以键(key)-值(value)对的形式进行映射存储
字典的键不能重复,且只能用'不可变类型'作为字典的键
字典的字面值表示方式:
字典的表示方式以{}括起来,以冒号(:)分割键~值对,各键~值对之间用逗号分隔开创建空字典:
d = {} # d 绑定空字典
创建非空字典:
d = {'name': 'tarena', 'age': 16}
d = {'yeat': 2018, 'month': 4, 'day':1}
字典的构造函数 dict
dict() 生成一个空字典,等同于{}dict(iterable) 用可迭代对象初始化一个字典
dict(**kwargs) 用命名关键字传参形式生成一个字典
示例:
d = dict()
d = dict([('name', 'tarena'), ('age', 15)])
d = dict(name = tarena, age = 15) #关键字参数创建字典
字典的键为不可变类型:
bool, int, float, complex, str, tuple, frozenset(固定集合), bytes(字节串),包括:None
可变的类型(不可充当字典的键)
list, dict, set(集合), bytearray(字节数组)字典的基本操作:
键索引:
语法:字典[键]
示例:
>>> d = {'name': 'tarena', 'age': 15}
>>> d['name']
'tarena
>>> d['age']
15
添加和修改字典
字典[键] = 值对象示例:
d = {}
d['birthday'] = (2002, 1, 1) #添加键值对
d['age'] = 16 #添加
d['age'] = 17 #修改'age'键所对应的值
删除字典元素 del 语句
语法:del 字典[键]
示例:
>>> d = {'name': 'tarena', 'age': 15}
>>> del d['age'] #删除'age'这个键
>>> d
{'name': 'tarena'}
字典的成员资格判断in / not in 运算符
用in 运算符可以判断一个键是否存在于字典中,如果存在则返回True,否则返回False
not in 返回值与 in 相反
示例:d = {1:'一', 2:'二'}
1 in d #True
2 in d #True
2 not in d #False
8 not in d #True
8 in d #False
'一' in d #False
列表的in 运算符与字典的in 运算符比较:
1、列表的in运算符计算时间会因列表中元素个数增加而增加
L=[3,7,0,1,2,85,1,…… 109465] #大约10万个元素
if 888 in L:
print('888在列表中') #慢
2、字面的in 运算符计算时间不会因键值对的个数增加而增加,操作速度快于列表
d={3: None, 7: 'xx',0: None,…… 109465:None}
if 888 in d:
print('888在字典的键里') #快
可以用于字典的内建(built-in)函数:
len(x) 返回字典的键值对个数max(x) 返回字典的键的最大值
min(x) 返回字典的键的最小值
sum(x) 返回字典的所有键的和
any(x) 对所有键进行真值测试,有一个为True,结果为True
all(x) 对所有键进行真值测试,所有为True结果为True
字典的方法:
函数 | 说明 |
---|---|
D代表字典对象 | |
D.clear() | 清空字典 |
D.pop(key) | 移除键,同时返回此键所对应的值 |
D.copy() | 返回字典D的副本,只复制一层(浅拷贝) |
D.update(D2) | 将字典 D2 合并到D中,如果键相同,则此键的值取D2的值作为新值 |
D.get(key, default) | 返回键key所对应的值,如果没有此键,则返回default |
D.keys() | 返回可迭代的 dict_keys 集合对象 |
D.values() | 返回可迭代的 dict_values 值对象 |
D.items() | 返回可迭代的 dict_items 对象 |
#! /usr/bin/python3
'''
输入一个字符串代表星期几(0-6),'0'/'周日'代表周日,'1'/'一'代表周一,……,'6'/'六'代表周六
任意输入字符串,打印代表这个字符串代表星期几,如果不是以上字符打印'字典内没有相应数据'
要求将以上数据存于字典中,键为字符串:'0123456日一……六'值为星期几或周几
'''
d = {
'0': '星期日', '日': '星期日', '1': '星期一', '一': '星期一',
'2': '星期二', '二': '星期二', '3': '星期三', '三': '星期三',
'4': '星期四', '四': '星期四', '5': '星期五', '五': '星期五',
'6': '星期六', '六': '星期六'
}
while True:
s = input('输入字符串')
if not s:
break
if s in d:
print(d[s])
else:
print('字典内没有相应数据')
字典推导式:
作用:用可迭代对象生成字典
语法:
{键表达式:值表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注:[]的内容代表可以省略
示例:
#! /usr/bin/python3
'''
有字符串列表如下:
L=['tarena','xiaozhang','hello']
用推到式生成如下字典:
d={'tarena':6,'xiaozhang':9,'hello':5}
注:字典的值为键的长度
'''
L = ['tarena', 'xiaozhang', 'hello']
d = {k: len(k) for k in L}
print(d)
-------------------------------------------------------------------------------------------------------------------------------
#! /usr/bin/python3
'''
2、有两个列表:
no=[1001,1002,1003,1004]
names=['Tom','Jerry','Spike','Tyke']
用no中的编码作为键,以names中的字符串为值,生成相应的字典
'''
no = [1001, 1002, 1003, 1004]
names = ['Tom', 'Jerry', 'Spike', 'Tyke']
d = {no[i]: names[i] for i in range(len(no))}
print(d)
字典推导式的嵌套
语法同列表推导式嵌套{键表达式:值表达式
for 变量1 in 可迭代对象1 [if 真值表达式1]}
for 变量2 in 可迭代对象2 [if 真值表达式2]}}