当前位置: 首页 > news >正文

(python)数据结构---字典

一、描述

  • 由键值key-value组成的数据的集合
  • 可变无序的key不可以重复
  • 字典的键key要可hash(列表、字典、集合不可哈希),不可变的数据结构是可哈希的(字符串、元组、对象、bytes)
  • 字典的值value可以是任意的数据类型

二、字典的相关操作

1、访问字典的值value

  • 字典可以通过key去访问对应的值
  • key不存在抛出KeyError异常
1 d = {"name": "wj", "age": 22}
2 print(d["name"])

运行结果如下:
wj

2、dict.get(key[, default])

  • 返回key对应的值value
  • key不存在返回缺省值default,如果没有设置缺省值就返回None
1 d = {"name": "wj", "age": 22}
2 print(d.get("name"))

运行结果如下:
wj

3、dict.setdefault(key[, default])

  • 返回key对应的值value
  • key不存在就创建这对kv对,value是default值,如果没有设置default值,缺省为None
1 d = {"name": "wj", "age": 22}
2 print(d.setdefault("gender", "F"))
3 print(d)

运行结果如下:
F
{'name': 'wj', 'age': 22, 'gender': 'F'}

4、通过key去增加或者修改值

  • 如果key存在就修改值,如果key不存在就增加该键值对
1 d = {"name": "wj", "age": 22}
2 d["name"] = "yzw"
3 print(d)
4 d["gender"] = "F"
5 print(d)

运行结果如下:
{'name': 'yzw', 'age': 22}
{'name': 'yzw', 'gender': 'F', 'age': 22}

5、dict.update([other])

  • 使用另外一个字典的kv对更新本字典
  • 如果key存在,就更新,不存在,就增加
1 d = {"name": "wj", "age": 22}
2 d.update(name="yaw")
3 d.update((("gender", "F"), ))
4 d.update({"birthday": "8-7"})
5 print(d)

运行结果如下:
{'gender': 'F', 'name': 'yaw', 'birthday': '8-7', 'age': 22}

6、dict.pop(key[, default])

  • key存在,移除它,并返回它的值value
  • 可以不存在,返回默认值defalut,没有设置defalut,抛出异常KeyError
1 d = {"name": "wj", "age": 22}
2 d.pop("name")
3 print(d)

运行结果如下:
{'age': 22}

7、dict.popitem()

  • 移除并返回一个任意的键值对
  • 如果字典为空,抛异常KeyError
1 d = {"name": "wj", "age": 22}
2 d.popitem()
3 print(d)

运行结果如下:
{'name': 'wj'}

8、dict.clear()

  • 清空字典

9、字典的删除

  • 通过del语句直接删除字典或者删除指定的key
1 d = {"name": "wj", "age": 22}
2 del d["name"]
3 print(d)
4 del d
5 # print(d)  NameError: name 'd' is not defined

运行结果如下:
{'age': 22}

10、字典遍历

  • 遍历key
1 d = {"name": "wj", "age": 22}
2 for k in d:
3     print(k)
1 d = {"name": "wj", "age": 22}
2 for k in d.keys():
3     print(k)
  • 遍历value
1 d = {"name": "wj", "age": 22}
2 for k in d:
3     print(d[k])
1 d = {"name": "wj", "age": 22}
2 for k in d:
3     print(d.get(k))
1 d = {"name": "wj", "age": 22}
2 for k in d.values():
3     print(k)
  • 遍历item,键值对
1 d = {"name": "wj", "age": 22}
2 for k, v in d.items():
3     print(k, v)

11、字典遍历和移除

  • 注意,字典在遍历的时候是不能够移除其元素的,否则抛异常RuntimeError
  • 如果想要在遍历的时候移除元素,可以在遍历的时候将key加入到一个列表中,然后遍历这个列表,来移除key
1 d = {"name": "wj", "age": 22}
2 keys = []
3 for k, v in d.items():
4     keys.append(k)
5 
6 for k in keys:
7     d.pop(k)
8 
9 print(d)

运行结果如下:
{}

12、工厂函数defaultdict

  • 当key不存在的时候,会调用这个工厂函数来生成key对应的值value
1 from collections import defaultdict
2 import random
3 
4 d = defaultdict(list)
5 for k in "abcde":
6     for i in range(random.randint(1, 5)):
7         d[k].append(i)
8 
9 print(d)

运行结果如下:
defaultdict(<class 'list'>, {'d': [0, 1, 2, 3], 'a': [0], 'c': [0, 1, 2, 3, 4], 'b': [0, 1, 2, 3, 4], 'e': [0, 1, 2, 3, 4]})

13、有序字典OrderedDict

  • 有序字典会记录元素插入的顺序,打印的时候也是按照这个顺序打印的
  • 比如:有的时候需要取出ID,希望是按照输入时的顺序取出,因为输入时的顺序是有序的,这种情况可以使用有序字典
1 d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
2 print(d)
3 from collections import OrderedDict
4 od = OrderedDict()
5 for k, v in d.items():
6     od[k] = d[k]
7 print(od)

运行结果如下:
{'pear': 1, 'orange': 2, 'banana': 3, 'apple': 4}
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

 

转载于:https://www.cnblogs.com/Sweltering/p/9894336.html

相关文章:

  • PCIE知识点
  • 以太网技术原理
  • 编辑语言发展历史
  • Python3+Selenium3自动化测试-(三)
  • 福大软工 · 第七次作业 - 需求分析报告
  • Linux 学习之路 --------ip地址虚拟网络
  • python基础知识梳理----6set 集合的应用
  • ajax中发送csrf的方法,(django环境)
  • CentOS 7.3 上安装docker
  • pycharm 取消空格,逗号 等符号的自动补全
  • Spring MVC 数据绑定 (四)
  • jupyter notebook中使用mpld3进行交互
  • C++Primer笔记-----继承
  • 最小支配集讲解
  • JS事件类型
  • @jsonView过滤属性
  • 2017前端实习生面试总结
  • android 一些 utils
  • Android组件 - 收藏集 - 掘金
  • CSS3 变换
  • JavaScript新鲜事·第5期
  • Java编程基础24——递归练习
  • mongo索引构建
  • nginx 负载服务器优化
  • PHP 的 SAPI 是个什么东西
  • vue数据传递--我有特殊的实现技巧
  • Xmanager 远程桌面 CentOS 7
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 浮动相关
  • 力扣(LeetCode)56
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 一道闭包题引发的思考
  • elasticsearch-head插件安装
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 移动端高清、多屏适配方案
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (11)MATLAB PCA+SVM 人脸识别
  • (8)STL算法之替换
  • (java)关于Thread的挂起和恢复
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (小白学Java)Java简介和基本配置
  • (一) springboot详细介绍
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)Linq学习笔记
  • (转载)Linux 多线程条件变量同步
  • ***原理与防范
  • *2 echo、printf、mkdir命令的应用
  • .NET Core中Emit的使用
  • .NET Micro Framework初体验(二)