发布时间:2018-02-24 15:25:05编辑:admin阅读(3782)
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
字典的特性:
dict是无序的
key必须是唯一的,so 天生去重
举个例子,下面是一个班级同学信息
info = {
'stu1101': "Zhang San",
'stu1102': "Li Si",
'stu1103': "Wang Wu",
}
print(info)
执行输出
{'stu1101': 'Zhang San', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu'}
查询
通过key查找
print(info.get("stu1101"))
执行输出 Zhang San
如果不存在,输出 None
还有一种方法,也可以查询,效果同上
print(info["stu1101"])
如果不存在,就报错
不推荐使用此方法
修改
info["stu1101"] = "Zhang Yi Xin"
print(info)
执行输出
{'stu1101': 'Zhang Yi Xin', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu'}
添加
如果修改的key不存在,则添加
info["stu1104"] = "Feng Shao Feng"
print(info)
执行输出
{'stu1101': 'Zhang San', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu', 'stu1104': 'Feng Shao Feng'}
删除
info["stu1104"] = "Feng Shao Feng"
info.pop("stu1103")
print(info)
执行输出
{'stu1101': 'Zhang San', 'stu1102': 'Li Si', 'stu1104': 'Feng Shao Feng'}
另外一个方法,也可以实现删除,效果同上
info["stu1104"] = "Feng Shao Feng"
del info["stu1103"]
print(info)
判断一个key是否存在字典中,可以使用in方法
print("stu1101" in info)
执行输出 True,不存在时,返回false
打印所有的值
print(info.values())
执行输出,不包括key
dict_values(['Zhang San', 'Li Si', 'Wang Wu'])
打印所有的key
print(info.keys())
执行输出
dict_keys(['stu1101', 'stu1102', 'stu1103'])
setdefault() 函数和get() 方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
#删除一个key
info.pop("stu1101")
info.setdefault('stu1101',"Zhang Xue You")
print(info)
执行输出
{'stu1102': 'Li Si', 'stu1103': 'Wang Wu', 'stu1101': 'Zhang Xue You'}
以一个字典去并更新另外一个字典
info = {
'stu1101': "Zhang San",
'stu1102': "Li Si",
'stu1103': "Wang Wu",
}
b = {
'stu1101': "Zhang Zi Cheng",
1:3,
2:5,
}
info.update(b)
print(info)
执行输出
{'stu1101': 'Zhang Zi Cheng', 'stu1102': 'Li Si', 'stu1103': 'Wang Wu', 1: 3, 2: 5}
从上可以看出,update()方法,将2个字典合并了,Key相同的值被后面一个更新了。
将字典转换为列表
info = {
'stu1101': "Zhang San",
'stu1102': "Li Si",
'stu1103': "Wang Wu",
}
print(info.items())
执行输出
dict_items([('stu1101', 'Zhang San'), ('stu1102', 'Li Si'), ('stu1103', 'Wang Wu')])
使用列表初始化一个字典
c = dict.fromkeys([6,7,8],"test")
print(c)
执行输出
{6: 'test', 7: 'test', 8: 'test'}
fromkeys是存在一个坑的,举个例子:
c = dict.fromkeys([6,7,8],[1,{"name":"jack"},333])
print(c)
#修改key为7的name值
c[7][1]['name'] = "rose"
print(c)
执行输出
{6: [1, {'name': 'jack'}, 333], 7: [1, {'name': 'jack'}, 333], 8: [1, {'name': 'jack'}, 333]}
{6: [1, {'name': 'rose'}, 333], 7: [1, {'name': 'rose'}, 333], 8: [1, {'name': 'rose'}, 333]}
怎么会这样?明明只修改了一个值,却都修改了。和浅copy类似的问题
注意: fromkeys后面的值,最好是一层的,如果有多层,修改时,会全部修改。
这个方法,尽量少用。
循环字典
方法1
for key in info:
print(key,info[key])
执行输出
stu1101 Zhang San
stu1102 Li Si
stu1103 Wang Wu
方法2
#会先把dict转成list,数据里大时莫用
for k,v in info.items():
print(k,v)
执行输出,效果同上。
推荐使用方法1
因为方法1,直接使用key去遍历字典
方法2,把数据转换为列表后,再输出,效率不够高效。
上一篇: python 字符串常用操作
下一篇: python 三级菜单
47745
46237
37110
34627
29229
25886
24745
19863
19417
17909
5716°
6316°
5836°
5888°
6985°
5829°
5846°
6361°
6316°
7673°