python基本数据类型之字典详解

字典(dict)

一、定义和表示

什么是字典( 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 "<stdin>", 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 "<stdin>", 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 "<stdin>", 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'])

练习

image.png

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("登录失败")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值