什么是字典( dict )
• 字典是Python中一个键值映射的数据结构
• 字典是无序的
• 字典是可变对象
• key必须是唯一的, so 天生去重
• example:
• singer = { key1:value , key2:value }
• singer = {“李圣杰”: ‘痴心绝对’
, ‘张韶涵’: ‘阿刁’
, ‘汪峰’:‘普通迪斯高’}
key =》 hashable 可hash对象 不可变对象,python中所有字符串、数字、元组、布尔值、None都是可hash对象(可变对象=》list)
value =》任何数据类型
字典定义示例:
mydic = {'key':'value','key1':'value'}
mydic = {
'key':'value',
0:'value',
None:'value',
(1,2):'value',
#[1,2]:'value', #list是不可hash对象
'key2':[1,2,3],
'key3':{'key':'value','key2':'value2'}
}
# key是天生去重的
>>> d3 ={"a":3, "b":4, "a":2}
>>> d3
{'a': 2, 'b': 4}
#key是可hash对象
>>> d3 = {True: 2}
>>> d3 = {5: 2}
>>> d3 = {[1,2]: 2}
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: unhashable type: 'list'
# dict() 字典转换函数
>>> lst = [('a',1), ('b',2)]
>>> d5 = dict(lst)
>>> d5
{'a': 1, 'b': 2}
定义空字典:
mydict = {}
mydict2 = dict()
print(mydict,mydict2)
# {} {}
二、字典的基本 *** 作
2.1 查看(取值)
通过key值取出value值
1.key在字典中取值案例:# 取值
>>> d3 = {"apple":10, "banana":7}
>>> d3['apple']
10
>>> d3 = {"root":{"passwd":"123456","money":1000},"admin":{"passwd":"admin123","money":2000}}
>>> d3["root"]
{'passwd': '123456', 'money': 1000}
>>> d3["root"]["passwd"]
'123456'
>>> d3["root"]["money"]
1000
songs = {
'孤勇者': {'singer':'Eason', 'count':100},
'青花瓷': {'singer':'周杰伦', 'count':101},
'荷塘月色':{'singer':'凤凰传奇', 'count':99}
}
print(songs)
song = input("请输入您要查询的歌曲:")
print(f"{song}的播放量是:{songs[song]['count']}")
{'孤勇者': {'singer': 'Eason', 'count': 100}, '青花瓷': {'singer': '周杰伦', 'count': 101}, '荷塘月色': {'singer': '凤凰传奇', 'count': 99}}
请输入您要查询的歌曲:孤勇者
孤勇者的播放量是:100
{'singer': '周杰伦', 'count': 101}
2.key不在字典中取值会报错,如果想要不报错,可用get方法设置默认值
dict.get(key,default) 获取key的值,如果没有就返回default的值,默认值为None
print(songs.get("青花瓷1","Sorry"))
# Sorry
###在控制台 *** 作
>>> d3 = {"a":3, "b":6, "c":1}
>>> d3["a"]
3
>>> d3["d"]
Traceback (most recent call last):
File "" , line 1, in <module>
KeyError: 'd'
>>> d3.get("d",0)
0
>>> d3.get("d")
>>> print(d3.get("d"))
None
>>> d3.get("a",0)
3
2.2 新增和修改
dict[key]=value
如果key存在,就是修改
如果key不存在,就是新增
案例:
>>> d3
{'a': 3, 'b': 6, 'c': 1}
>>> d3['a'] = 8 #key存在,就是修改
>>> d3
{'a': 8, 'b': 6, 'c': 1}
>>> d3['d'] = 9 #key不存在,就是新增
>>> d3
{'a': 8, 'b': 6, 'c': 1, 'd': 9}
print(songs)
# 修改key对应value值
songs["青花瓷"]={}
# 新增一个key
songs["恰恰恰"]={}
print(songs)
{'孤勇者': {'singer': 'Eason', 'count': 100}, '青花瓷': {'singer': '周杰伦', 'count': 101}, '荷塘月色': {'singer': '凤凰传奇', 'count': 99}}
{'孤勇者': {'singer': 'Eason', 'count': 100}, '青花瓷': {}, '荷塘月色': {'singer': '凤凰传奇', 'count': 99}, '恰恰恰': {}}
2.3 删除
dict.pop(key) 传入key的值,删除对应的键值对,返回值为value
dict.popitem() 默认删除最后进入字典的一个键值对,后进先出,返回值为(key,value)
>>> d3
{'a': 8, 'b': 6, 'c': 1, 'd': 9}
>>> d3.pop('a')
8
>>> d3
{'b': 6, 'c': 1, 'd': 9}
>>> d4 = {"a":{"x":1}}
>>> d4["a"]
{'x': 1}
>>> d4["a"].pop("x")
1
>>> d4
{'a': {}}
# 如果传入的key值不存在时,会报错,如果想不报错的话,也可以指定默认值
d4.pop('b')
KeyError Traceback (most recent call last)
<ipython-input-38-6c8939f31b31> in <module>
----> 1 d4.pop('b')
KeyError: 'b'
>>> d4.pop('b',"ok")
'ok'
# 在pycharm中的效果
print(songs)
print(songs.pop("恰恰恰1", "这个key值不存在"))
# {'孤勇者': {'singer': 'Eason', 'count': 100}, '青花瓷': {}, '荷塘月色': {'singer': '凤凰传奇', 'count': 99}, '恰恰恰': {}}
# 这个key值不存在
>>> d3
{'b': 6, 'c': 1, 'd': 9}
>>> d3.popitem()
('d', 9)
>>> d3
{'b': 6, 'c': 1}
2.4 合并
dict1.update(dict2) 将dict2合并到dict1
dict(dict1, **dict2) 将dict1与dict2合并并生成一个新字典
>>> d5
{'a': 1, 'b': 2}
>>> d6
{'c': 4, 'd': 3}
>>> d5.update(d6)
>>> d5
{'a': 1, 'b': 2, 'c': 4, 'd': 3}
>>> d5
{'a': 1, 'b': 2}
>>> d6
{'c': 4, 'd': 3}
>>> dict(d5, **d6)
{'a': 1, 'b': 2, 'c': 4, 'd': 3}
>>> d5 + d6 ------》 字典没有加法
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
2.5 遍历
>>> d5
{'a': 1, 'b': 2}
>>> for key in d5:
... print(key)
...
a
b
>>> for value in d5.values():
... print(value)
...
1
2
>>> for i in d5.items():
... print(i)
...
('a', 1)
('b', 2)
>>> for key,value in d5.items():
... print(f"{i}-->{j}")
...
a-->1
b-->2
2.6成员关系
成员关系:默认都是判断字典的key值
如果想判断value值,需要用到values()方法
>>> d5
{'a': 1, 'b': 2}
>>> 'b' in d5
True
>>> 2 in d5
False
>>> 2 in d5.values() --------》判断值value在不在字典里
True
>>> d5.values()
dict_values([1, 2])
>>> d5.keys()
dict_keys(['a', 'b'])
练习
xiyouji = {
"BOSS": "唐僧",
"CTO": "悟空",
"CFO": "八戒",
"搬砖": "沙僧",
"苦力": "白龙马"
}
print(xiyouji["CTO"])
print(xiyouji.get("BOSS"))
for key in xiyouji:
print(f"{key}是{xiyouji[key]}")
name = input("请输入你要查询的角色:")
if name in xiyouji.values():
print(f"{name}在西游记中")
else:
print(f"{name}不在西游记中")
print("欢迎使用用户检测系统")
# 数据定义放在循环外
users = {
'root': '123456',
'admin': 'admin'
}
while True:
username = input("请输入用户名:")
password = input("请输入密码:")
if username in users and password == users[username]:
#if password == users.get(username) and username in users:
print("登录成功")
else:
print("登录失败")
测系统")
# 数据定义放在循环外
users = {
'root': '123456',
'admin': 'admin'
}
while True:
username = input("请输入用户名:")
password = input("请输入密码:")
if username in users and password == users[username]:
#if password == users.get(username) and username in users:
print("登录成功")
else:
print("登录失败")
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)