3.7.1 定义Dictionary(字典)

字典的键(key)必须为不可变类型(数字、字符串、元组)且键名不能重复,定义字典的方式有两种:

  • dict()定义:dict_name = dict((["key","value"], ["键名","值"])),元组里面嵌套列表
  • 直接赋值:dict_name = {"key":"value","键名":"值"}
dict_1 = dict((["name", "Emily"],["age", "18"]))  # 结果为:{'name': 'Emily', 'age': '18'}
print(dict_1)
dict_2 = {"name": "Emily","age": "18"}
print(dict_2)  # 结果为:{'name': 'Emily', 'age': '18'}

空字典:dict_name = {}。集合也用了花括号,但是空集合创建方式为:set_name = set()

3.7.2 字典的增删改查

  • 增加:dict_name[key] = value,来增加字典里的键值对。
dict_3 = dict_2 = {"name": "Emily", "age": "18"}
dict_3["sex"] = "female"
print(dict_3)  # 结果为:{'name': 'Emily', 'age': '18', 'sex': 'female'}
  • 删除:del dict_name[key],来删除键。
# 接上述例子
del dict_3["sex"]
print(dict_3)  # 结果为:{'name': 'Emily', 'age': '18'}
  • 修改:dict_name[key] = value,选择字典内存在的键,来修改值。
dict_3["age"] = "20"
print(dict_3)  #结果为:{'name': 'Emily', 'age': '20'}
  • 查找(获取):dict_name[key],通过键来查找对应的值(类似下标)。
print(dict_3["name"])  # 结果为Emily

3.7.3 字典的操作方法

  • get():用于从字典获取指定键的值。在get()函数中可以设置默认值,当get函数没有获取到对应键时,get函数会将默认值返回,格式为:dict_name.get(key,默认值(可以没有))
  • len():求字典长度,格式为:len(dict_name)。
  • keys():将以列表的形式返回字典中的所有键,格式为:dict_name.keys()。
  • values():将以列表的形式返回字典中的所有值,格式为:dict_name.values()。
  • items():将以列表的形式返回字典中的所有键值对,格式为:dict_name.items()。
  • clear():将字典清空,格式为:dict_name.clear()。
  • copy():用于创建字典的副本,修改原字典对象,不会影响其副本,格式为:dict_name_copy()。
  • fromkeys():用于创建一个新的字典,第一个参数是一个序列(列表/元组/集合),用于字典的键,第二个参数可以是任何数据类型,作为每个键的值(不管第二个参数是什么数据类型,它都会是第一个参数中每一个键的值),格式为:dict_name.fromkeys(参数1,参数2)
  • pop():从字典中移除指定键,并返回该键所对应的值,格式为:dict_name.pop(key)。
  • popitem():用于从字典中删除最后一项,并以元组形式返回该项所对应的键和值,格式为:dict_name.popitem()。
  • setdefault():用于设置键的默认值,若在字典中该键已经存在,则忽略设置;若不存在则添加该键和值,格式为:dict_name.setdefault(key, value)。
  • update():将字典2更新到字典1。若字典2的键在字典1中已经存在,则对字典1进行修改(覆盖),若不存在,则对字典1进行添加,格式为:dict_name1.update(dict_name2)。
# -----------get()
dict_4 = {"name": "Emily", "age": "18"}
r = dict_4.get("name")
print(r)  # 结果为:Emily
r1 = dict_4.get("sex")
print(r1)  # 结果为:None
r2 = dict_4.get("sex", "female")  # 给了默认值
print(r2)  # 结果为:female
print(dict_4)  # 虽然给了sex默认值,但实际dict_4没有被改变还是{"name": "Emily", "age": "18"}
# -----------len()
print(len(dict_4))  # 结果为:2
# -----------keys()
print(dict_4.keys())  # 结果为:dict_keys(['name', 'age'])
dict_5 = {"name": "Emily","age": "18","skills": {"skill_1": "Java","skill_2": "Python"}
}
print(dict_5.keys())  # 结果为dict_keys(['name', 'age', 'skills'])  # 不会吧嵌套的字典里的键输出来
print(dict_5.get("skills").keys())  # 获取嵌套里面的键
# ------------values()
dict_6 = {"name": "Emily", "age": "18"}
r3 = dict_6.values()
print(r3)  # 结果为:dict_values(['Emily', '18'])
# ------------items()
dict_7 = {"name": "Emily", "age": "18"}
r4 = dict_7.items()
print(r4)  #结果为:dict_items([('name', 'Emily'), ('age', '18')])
# ------------clear()
dict_8 = {"name": "Emily", "age": "18"}
dict_8.clear()
print(dict_8)  # 结果为:{}
# ------------copy()
dict_9 = {"name": "Emily", "age": "18"}
dict_10 = dict_9.copy()
del dict_9["name"]
print(dict_9)  # 结果为:{'age': '18'}
print(dict_10)  # 结果为:{'name': 'Emily', 'age': '18'},副本不会被影响
# ------------fromkeys()
dict_11 = {}
dict_12 = dict_11.fromkeys(("name", "age"))
print(dict_11)  # 结果为:{}
print(dict_12)  # 结果为:{'name': None, 'age': None},使用fromkeys()会新生成一个字典
dict_12_1 = dict_11.fromkeys(("name", "age"), 1)
print(dict_12_1)  # 结果为:{'name': 1, 'age': 1}
dict_12_2 = dict_11.fromkeys(("name", "age"), (1, 2))
print(dict_12_2)  # 结果为:{'name': (1, 2), 'age': (1, 2)},如果想分开赋别的值,需要用dict_name[key] = value
# ------------pop()
dict_13 = {"name": "Emily", "age": "18"}
r5 = dict_13.pop("name")  # 有返回值,返回值为指定键对应的值
print(dict_13)  # 结果为:{'age': '18'}
print(r5)  # 结果为:Emily
# ------------popitem()
dict_14 = {"name": "Emily", "age": "18"}
r6 = dict_14.popitem()
print(dict_14)  # 结果为:{'name': 'Emily'}
print(r6)  # 结果为:('age', '18')
# ------------setdefault()
dict_15 = {"name": "Emily", "age": "18"}
dict_15.setdefault("skills", "Python")
print(dict_15)  # 结果为:{'name': 'Emily', 'age': '18', 'skills': 'Python'}
dict_15 = {"name": "Emily", "age": "18"}
dict_15.setdefault("name", "Mike")
print(dict_15)  # 结果为:{'name': 'Emily', 'age': '18', 'skills': 'Python'},并没有改变
dict_15_1 = {"name": "Emily","name": "Mike"}
print(dict_15_1)  # 结果为:{'name': 'Mike'},存在重复键时,只保留重复键的最后一条键值对(覆盖了前面的)
# ------------update()
dict_16_1 = {"name": "Emily"}
dict_16_2 = {"name": "Alice"}
dict_16_1.update(dict_16_2)
print(dict_16_1)  # 结果为:{'name': 'Alice'},覆盖了
dict_16_3 = {"age": 18}
dict_16_1.update(dict_16_3)
print(dict_16_1)  # 结果为:{'name': 'Alice', 'age': 18}

3.7 Dictionary(字典)相关推荐

  1. List数组,string数组,Dictionary字典三种contain方法的查询速度

    在生成随机不重复数时要判断生成的数是否已生成过,这时就要和原来生成的数进行比较是否有重复,有以下三种方法 1. list数组采用contains()方法 2.string数组采用contains()方 ...

  2. C#中的Dictionary字典类介绍

    关键字:C# Dictionary 字典  作者:txw1958 原文:http://www.cnblogs.com/txw1958/archive/2012/11/07/csharp-diction ...

  3. swift_005(Swift的Dictionary 字典)

    1.Dictionary (可变不可变不区分了)字典  <Swift开发指南> // Swift 字典的key没有类型限制可以是整型或字符串,但必须是唯一的. var someDict:[ ...

  4. boost::contract模块实现dictionary字典的测试程序

    boost::contract模块实现dictionary字典的测试程序 实现功能 C++实现代码 实现功能 boost::contract模块实现dictionary字典的测试程序 C++实现代码 ...

  5. 关于Dictionary字典和List列表

    命名空间System.Collections.Generic中有两个非常重要,而且常用的泛型集合类,它们分别是Dictionary<TKey,TValue>字典和List<T> ...

  6. C#中的Dictionary字典类介绍(转载)

    C#中的Dictionary字典类介绍 关键字:C# Dictionary 字典  作者:txw1958 原文:http://www.cnblogs.com/txw1958/archive/2012/ ...

  7. (转)C#中的Dictionary字典类介绍

    关键字:C# Dictionary 字典  作者:txw1958 原文:http://www.cnblogs.com/txw1958/archive/2012/11/07/csharp-diction ...

  8. 你能熟练使用Dictionary字典和List列表吗?

    命名空间System.Collections.Generic中有两个非常重要,而且常用的泛型集合类,它们分别是Dictionary<TKey,TValue>字典和List<T> ...

  9. 英文单词缩写----DXNRY – Dictionary 字典

    由于英文的字母太多,不方便的时候发短信很慢,所以外国人很多都在短信上输入 缩写 ,这样就节省了很多时间.花了好久才把这些 缩写 给整理出来,唯一在这里需要说明的是,不是所有的人都明白这些 缩写 是什么 ...

  10. 【Python】数据类型 Number数字、String字符串、List列表、Tuple元组、Set集合、Dictionary字典

    Python数据类型 2021/6/3 周四 学习内容: Python数据类型.Number(数字).String(字符串).List(列表).Tuple(元组).Set(集合).Dictionary ...

最新文章

  1. Mac OS 如何连接windows 文件共享
  2. explode() 字符串转换数组
  3. 阶段总结——201511
  4. 开源软件使用_消费开源软件:如何使用和购买
  5. 用jquery给Struts2的s:radio /标签添加change事件
  6. Linux下Qt5: QMediaRecorder的问题,以及使用QCamera相关类进行摄像头视频采集
  7. 从零开始学python必看,最强“Python编程三剑客(pdf)”,你值得拥有!
  8. 软件行业各职位英文缩写
  9. word页眉前后不一致怎么设置_如何设置页眉部分内容前后不同,页脚部分内容也前后不同的WORD文档?...
  10. java:解一元二次方程
  11. 【c++】如何获取int类型最大值以及float类型最大值
  12. gps有几个轨道面_GPS(全球定位系统)的 24 颗卫星的轨道是如何设计的?
  13. 星环科技数据治理与数据价值评估实践分享
  14. 云服务ftp服务器搭建_如何在阿里云服务器搭建FTP服务器,在本地电脑连接并操作...
  15. 时序数据取样方法_数据科学的抽样方法
  16. vue项目打包部署(Linux命令)
  17. 二战前线2 (commando2) flash 修改
  18. 技术干货|昇思MindSpore NLP模型迁移之Bert模型—文本匹配任务(二):训练和评估
  19. python+qt5项目管理系统开发_Qt5——从零开始的学生管理系统
  20. winRAR真难用,我决定自创一个(筑基期)适合无基础

热门文章

  1. 铜仁一中2021高考成绩查询,贵州铜仁第一中学2021年招生录取分数线
  2. 平安云:在群雄逐鹿的云市场中野蛮生长
  3. 列车运行图的编制原则是什么_列车运行图的编制有什么要求?
  4. 企业为什么要建网站?
  5. android gone动画_java – Android添加简单的动画,而setvisibility(view.Gone)
  6. OpenCV边界外推和边界处理
  7. WLAN框架应用笔记
  8. oca sci 计算机视觉,张启灿
  9. 让chrome浏览器变成在线编辑器
  10. zzulioj 1787: 生化危机 (vector+dfs) 好题