字典(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'])

练习

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("登录失败")

python容器类型-字典相关推荐

  1. python容器类型——字典{dict}

    python容器类型--字典{dict} 文章目录 python容器类型--字典{dict} 一.特点 二.定义 三.字典的基本操作 1.查看 2.增加.修改 3.删除 4.合并字典 5.成员关系 6 ...

  2. python 容器类型_Python容器类型公共方法总结

    以下公共方法支持列表,元组,字典,字符串. 内置函数 Python 包含了以下内置函数: 函数 描述 备注 len(item) 计算容器中元素个数 del(item) 删除变量 del 有两种方式 m ...

  3. python映射类型-Python 映射类型字典dict操作定义

    Python映射类型字典基础知识:字典是用大括号{ }来表示,它是python中最灵活的内置数据类型.它是一个无序的集合,通过键来存取值,而不能用索引. 字典的创建和使用 字典的组成:字典是由大括号{ ...

  4. python 容器类型存放_Python学习笔记三(容器)

    基本数据类型 int Python3中的整数只有int,没有long类型,int最大值如下, Python3中int的最大值的获取 float Python3中float 默认保留一位小数,/ 除法默 ...

  5. Python基本类型-字典

    Python中的字典相当于.Net中的Dictionary或Java中的Mapping.它不是序列,而是一种映射.字典存储一系列"key:value"对,key(键)不可重复,va ...

  6. Python容器类型公共方法汇总

    以下公共方法支持列表,元组,字典,字符串. 内置函数 Python 包含了以下内置函数: 函数 描述 备注 len(item) 计算容器中元素个数 del(item) 删除变量 del 有两种方式 m ...

  7. python 容器类型存放_python 容器类型

    一.复习 1.基本数据类型 int.float.bool.complex.str.list.dict.tuple. set.... 类型名() ---> 强制转换 2.字符串 str a. 'a ...

  8. pythonrandint函数左闭右开_Python容器类型公共方法总结

    以下公共方法支持列表,元组,字典,字符串. 内置函数 Python 包含了以下内置函数: 函数 描述 备注 len(item) 计算容器中元素个数 del(item) 删除变量 del 有两种方式 m ...

  9. 简明python教程 --C++程序员的视角(四):容器类型(字符串、元组、列表、字典)和参考

    数据结构简介 Python定义的类型(或对象)层次结构在概念上可以划分为四种类别:简单类型.容器类型.代码类型 和内部类型. 可以将 PyObject 类之下的所有 Python 类划分为 Pytho ...

最新文章

  1. golang-exec cmd data race
  2. Struts2学习8--文件上传(多个文件上传)
  3. 几个Linux命令输出的各列含义
  4. oracle awr windows,windows下的oracle 如何生成awr报告
  5. Android programming on Mac 之安装Eclipse
  6. 媒体播放器三大底层架构
  7. Leetcode--343. 整数拆分
  8. myeclipse背景设置
  9. STM32工作笔记0032---编写跑马灯实验---寄存器版本
  10. mysql show status 过滤_给MySQL的show table status结果做过滤
  11. 主流开源 BI 产品对比
  12. 计算机诗人 原理,自动作诗器,藏头诗软件生成器原理是什么?
  13. centos7安装polygraph
  14. 入职东北国企做程序员一个月,感受如何?
  15. 移动通信网络规划:误码率
  16. 德国GMX Email免费邮箱服务65GB超大邮件存储空间
  17. 【Python 爬虫实践】:《战狼2》豆瓣影评分析
  18. Android官方文档—APP组件(Services)(Bound Services)
  19. 免费内网穿透端口映射工具-网络通
  20. [转]全网最!详!细!tarjan算法讲解

热门文章

  1. JSON文件的读取操作详解
  2. 软件工程——四则运算3(C#)
  3. SNS2124(OEM博科FC交换机)忘记密码,密码初始化
  4. python opencv压缩图片_OpenCV Python 缩放图片
  5. 流氓软件强夺用户数据,马斯克截胡扎克伯格!
  6. LDPC译码:和积译码算法(SPA)、最小和算法(MSA)、分层译码算法(LBP)、动态信息更新策略IDS(含RBP、NW-RBP、SVNF-RBP)的MATLAB实现
  7. java重写的目的是什么_什么是重写?重写的作用?
  8. java支付宝rsa2签名_JAVA RSA签名 解签(利用支付宝封装的函数)
  9. linux su无效_linux系统 su切换用户失败情况
  10. python3 windows下的几乎万能爬虫方法