Python3学习之路~2.4 字典操作

字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

定义字典(dictionary)

info = {
    'stu1101': "Amy",
    'stu1102': "Bob",
    'stu1103': "Cindy"
}

字典的特性:

  • dict是无序的
  • key必须是唯一的,so 天生去重

增加

>>> info["stu1104"]="David" #增加
>>> info
{'stu1101': 'Amy', 'stu1102': 'Bob', 'stu1103': 'Cindy', 'stu1104': 'David'}
View Code

删除

>>> info
{'stu1101': 'Amy', 'stu1102': 'Bob', 'stu1103': 'Cindy', 'stu1104': 'David'}
>>> info.pop("stu1101") #标准删除
'Amy'
>>> info
{'stu1102': 'Bob', 'stu1103': 'Cindy', 'stu1104': 'David'}
>>> del info["stu1103"] #换个姿势删除,del是Python自带的,想删谁就删谁
>>> info
{'stu1102': 'Bob', 'stu1104': 'David'}
>>> info.popitem() #随机删除
('stu1104', 'David')
>>> info
{'stu1102': 'Bob'}
View Code

查找

>>> info = {'stu1101': "Amy",'stu1102': "Bob",'stu1103': "Cindy"}
>>> "stu1102" in info #标准用法,判断一个key是否在字典中存在
True
>>> info.get("stu1102") #获取
'Bob'
>>> info["stu1102"] #同上,但是看下面
'Bob'
>>> info.get("stu1105") #key不存在返回None
>>> print(info.get("stu1105"))
None
>>> info["stu1105"] #key不存在就报错,慎用
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'stu1105'
View Code

修改

>>> info
{'stu1101': 'Amy', 'stu1102': 'Bob', 'stu1103': 'Cindy'}
>>> info["stu1101"]="Alex" #修改
>>> info
{'stu1101': 'Alex', 'stu1102': 'Bob', 'stu1103': 'Cindy'}
View Code

其他

>>> info = {'stu1101': "Amy",'stu1102': "Bob",'stu1103': "Cindy"}
>>> info.values() #输出字典中所有的value
dict_values(['Amy', 'Bob', 'Cindy'])
>>> info.keys() #输出字典中所有的key
dict_keys(['stu1101', 'stu1102', 'stu1103'])
>>> info.setdefault("stu1106","xiaoming") #查找字典中是否有stu1106,若没有则创建并为其赋值为xiaoming
'xiaoming'
>>> info
{'stu1101': 'Amy', 'stu1102': 'Bob', 'stu1103': 'Cindy', 'stu1106': 'xiaoming'}
>>> info.setdefault("stu1101","Alex") #查找字典中是否有stu1101,若有,返回其值,且不修改
'Amy'
>>> info
{'stu1101': 'Amy', 'stu1102': 'Bob', 'stu1103': 'Cindy', 'stu1106': 'xiaoming'}
>>> b={1:2,3:4,'stu1101':'Alex'}
>>> info.update(b) #两个字典表合并,若key有交叉则覆盖其值
>>> info
{'stu1101': 'Alex', 'stu1102': 'Bob', 'stu1103': 'Cindy', 'stu1106': 'xiaoming',1: 2, 3: 4}
>>> info.items() #字典转成列表
dict_items([('stu1101', 'Alex'), ('stu1102', 'Bob'), ('stu1103', 'Cindy'), ('stu1106', 'xiaoming'), (1, 2), (3, 4)])
>>> dict.fromkeys([1,2,3],'test') #通过一个列表生成默认dict,最好少用,因为有个不好解释的坑,如下
{1: 'test', 2: 'test', 3: 'test'}
>>>
>>> c=dict.fromkeys([1,2,3],'test')
>>> c
{1: 'test', 2: 'test', 3: 'test'}
>>> c[1]="aaa" #无嵌套时,只修改1对应的value
>>> c
{1: 'aaa', 2: 'test', 3: 'test'}
>>> c=dict.fromkeys([6,7,8],["aa",{"name":"Alex"},"bb"])
>>> c
{6: ['aa', {'name': 'Alex'}, 'bb'], 7: ['aa', {'name': 'Alex'}, 'bb'], 8: ['aa', {'name': 'Alex'}, 'bb']}
>>> c[7][1]["name"]="jack" #多层嵌套时,所有的key对应的value都修改,类似于列表的copy方法
>>> c
{6: ['aa', {'name': 'jack'}, 'bb'], 7: ['aa', {'name': 'jack'}, 'bb'], 8: ['aa', {'name': 'jack'}, 'bb']}
View Code

循环dict

>>> info = {'stu1101': "Amy",'stu1102': "Bob",'stu1103': "Cindy"}
>>> for key in info:
...     print(key,info[key]) #方法1,高效,建议使用
...
stu1101 Amy
stu1102 Bob
stu1103 Cindy
>>> for k,v in info.items():
...     print(k,v)    #方法2,会先把dict转成list,数据里大时莫用
...
stu1101 Amy
stu1102 Bob
stu1103 Cindy
>>>
View Code

 多级字典嵌套及操作

...

猜你喜欢

转载自www.cnblogs.com/zhengna/p/9182150.html