1.定义
字典是以键值对的形式存储数据{key1:value1, key2:value2}
与列表查询数据相似,只不过将索引
换成了key
字典的key
必须是可哈希的数据类型,即不可变。
字典的value
可以是任何数据类型。
2.增删改查
1.增加和修改元素
创建空字典,添加新元素
dic = dict()
dic["篮球"] = "NBA"
dic["公牛队"] = "乔丹"
print(dic)
就可以得到字典的内容:{'篮球': 'NBA', '公牛队': '乔丹'}
如果想要修改公牛队对应的值,直接替换即可
dic["公牛队"] = "罗德曼"
print(dic)
可以得到修改后的字典数据:{'篮球': 'NBA', '公牛队': '罗德曼'}
添加元素除了上述方法,还可以用其他操作:
dic.setdefault("FMVP", "詹姆斯")
最终会添加新的键值对:{'篮球': 'NBA', '公牛队': '罗德曼', 'FMVP': '詹姆斯'}
但要注意的是,这个方法只能用来创建新的键值对,而不能修改原来key
对应的value
此处setdefault
的意思是设置默认值,仅针对还未创建的键值,表示新建的元素。
2-1 删除元素
存在数据:dic = {'篮球': 'NBA', '公牛队': '罗德曼', 'FMVP': '詹姆斯'}
删除'篮球': 'NBA',
dic.pop('篮球')
删除key
即可
2-2 循环删除元素
存在数据:dict = { "张三": "MVP", "李四": "FMVP", "张五": "DPOY", "王六": "AMVP" }
需求:批量删除姓张的键值对
# 存在的数据
dict = {
"张三": "MVP",
"李四": "FMVP",
"张五": "DPOY",
"王六": "AMVP"
}
# 空的临时列表,存储即将删除的姓张的人名"key"
tmp = []
# 遍历字典的所有key
for key in dict:
# 如果key是姓张的
if key.startswith("张"):
# 将姓张的key存储在临时列表tmp中
tmp.append(key)
# 遍历临时列表,里面都是姓张的key
for name in tmp:
# 删除字典中姓张的key和value
dict.pop(name)
# 打印结果
print(dict)
3.查询元素
方法一:
直接通过字典的key
就可以查询对应的键值
print(dic['公牛队'])
这种查询方法,如果查询的key
不存在,程序会报错。
确定key
没问题,就可以用这种方法。
方法二:
print(dic.get('公牛队'))
这种查询方法,如果查询的key
不存在,会返回None
。
不确定key
的时候,用此方法。
补充说明,使用方法二,会给用户一个更好的体验,而不是直接报错。
dic = {'篮球': 'NBA',
'公牛队': '罗德曼',
'FMVP': '詹姆斯'}
name = input("请输入你要查询的东西:")
out = dic.get(name)
if out == None:
print("没有这个结果...")
else:
print(out)
3.循环遍历
存在数据:dic = {'篮球': 'NBA', '公牛队': '罗德曼', 'FMVP': '詹姆斯'}
我们使用for
循环遍历字典时,默认查询得到的结果是key
,而不是value
将所有的key
放在一个列表中
将所有的value
放在一个列表中
直接拿到字典中的所有key
和value
这个结果集展示了列表中包含的元组,为了得到更详细的key
和value
通过下列代码可以实现:
dic = {'篮球': 'NBA',
'公牛队': '罗德曼',
'FMVP': '詹姆斯'}
print(dic.items())
for item in dic.items():
key = item[0]
value = item[1]
print(key, value)
由此可以得到key
和value
。
但上述代码有点繁琐,我们可以解构(解包)进行简化。(解构可以对列表和元组操作)
由于已经知道dic.items()
得到的是两个结果,可以一一对应,因此直接对item分解成key
和value
。
for key,value in dic.items():
print(key, value)
该代码的效果就像下图一样