首页 > 编程语言 >Python dict字典方法完全攻略(全)

Python dict字典方法完全攻略(全)

时间:2022-10-17 20:55:36浏览次数:70  
标签:攻略 Python 89 键值 key 90 print dict 字典

我们知道,Python 字典的数据类型为 dict,我们可使用 dir(dict) 来查看该类型包含哪些方法,例如:

>>> dir(dict)
['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

这些方法中,fromkeys() 和 get() 的用法已在《Python字典》中进行了介绍,这里不再赘述,本节只给大家介绍剩下的方法。

keys()、values() 和 items() 方法

将这三个方法放在一起介绍,是因为它们都用来获取字典中的特定数据:
  • keys() 方法用于返回字典中的所有键(key);
  • values() 方法用于返回字典中所有键对应的值(value);
  • items() 用于返回字典中所有的键值对(key-value)。

请看下面的例子:
  1. scores = {'数学': 95, '语文': 89, '英语': 90}
  2. print(scores.keys())
  3. print(scores.values())
  4. print(scores.items())
运行结果:

dict_keys(['数学', '语文', '英语'])
dict_values([95, 89, 90])
dict_items([('数学', 95), ('语文', 89), ('英语', 90)])

可以发现,keys()、values() 和 items() 返回值的类型分别为 dict_keys、dict_values 和 dict_items。

需要注意的是,在 Python 2.x 中,上面三个方法的返回值都是列表(list)类型。但在 Python 3.x 中,它们的返回值并不是我们常见的列表或者元组类型,因为 Python 3.x 不希望用户直接操作这几个方法的返回值。

在 Python 3.x 中如果想使用这三个方法返回的数据,一般有下面两种方案:

1) 使用 list() 函数,将它们返回的数据转换成列表,例如:
  1. a = {'数学': 95, '语文': 89, '英语': 90}
  2. b = list(a.keys())
  3. print(b)
运行结果为:

['数学', '语文', '英语']


2) 使用 for in 循环遍历它们的返回值,例如:
  1. a = {'数学': 95, '语文': 89, '英语': 90}
  2. for k in a.keys():
  3. print(k,end=' ')
  4. print("\n---------------")
  5. for v in a.values():
  6. print(v,end=' ')
  7. print("\n---------------")
  8. for k,v in a.items():
  9. print("key:",k," value:",v)
运行结果为:

数学 语文 英语
---------------
95 89 90
---------------
key: 数学  value: 95
key: 语文  value: 89
key: 英语  value: 90

copy() 方法

copy() 方法返回一个字典的拷贝,也即返回一个具有相同键值对的新字典,例如:
  1. a = {'one': 1, 'two': 2, 'three': [1,2,3]}
  2. b = a.copy()
  3. print(b)
运行结果为:

{'one': 1, 'two': 2, 'three': [1, 2, 3]}

可以看到,copy() 方法将字典 a 的数据全部拷贝给了字典 b。

注意,copy() 方法所遵循的拷贝原理,既有深拷贝,也有浅拷贝。拿拷贝字典 a 为例,copy() 方法只会对最表层的键值对进行深拷贝,也就是说,它会再申请一块内存用来存放 {'one': 1, 'two': 2, 'three': []};而对于某些列表类型的值来说,此方法对其做的是浅拷贝,也就是说,b 中的 [1,2,3] 的值不是自己独有,而是和 a 共有。

请看下面的例子:
  1. a = {'one': 1, 'two': 2, 'three': [1,2,3]}
  2. b = a.copy()
  3. #向 a 中添加新键值对,由于b已经提前将 a 所有键值对都深拷贝过来,因此 a 添加新键值对,不会影响 b。
  4. a['four']=100
  5. print(a)
  6. print(b)
  7. #由于 b 和 a 共享[1,2,3](浅拷贝),因此移除 a 中列表中的元素,也会影响 b。
  8. a['three'].remove(1)
  9. print(a)
  10. print(b)
运行结果为:

{'one': 1, 'two': 2, 'three': [1, 2, 3], 'four': 100}
{'one': 1, 'two': 2, 'three': [1, 2, 3]}
{'one': 1, 'two': 2, 'three': [2, 3], 'four': 100}
{'one': 1, 'two': 2, 'three': [2, 3]}

从运行结果不难看出,对 a 增加新键值对,b 不变;而修改 a 某键值对中列表内的元素,b也会相应改变。

update() 方法

update() 方法可以使用一个字典所包含的键值对来更新己有的字典。

在执行 update() 方法时,如果被更新的字典中己包含对应的键值对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的键值对,则该键值对被添加进去。

请看下面的代码:
  1. a = {'one': 1, 'two': 2, 'three': 3}
  2. a.update({'one':4.5, 'four': 9.3})
  3. print(a)
运行结果为:

{'one': 4.5, 'two': 2, 'three': 3, 'four': 9.3}

从运行结果可以看出,由于被更新的字典中已包含 key 为“one”的键值对,因此更新时该键值对的 value 将被改写;而被更新的字典中不包含 key 为“four”的键值对,所以更新时会为原字典增加一个新的键值对。

pop() 和 popitem() 方法

pop() 和 popitem() 都用来删除字典中的键值对,不同的是,pop() 用来删除指定的键值对,而 popitem() 用来随机删除一个键值对,它们的语法格式如下:

dictname.pop(key)
dictname.popitem()

其中,dictname 表示字典名称,key 表示键。

下面的代码演示了两个函数的用法:
  1. a = {'数学': 95, '语文': 89, '英语': 90, '化学': 83, '生物': 98, '物理': 89}
  2. print(a)
  3. a.pop('化学')
  4. print(a)
  5. a.popitem()
  6. print(a)
运行结果:

{'数学': 95, '语文': 89, '英语': 90, '化学': 83, '生物': 98, '物理': 89}
{'数学': 95, '语文': 89, '英语': 90, '生物': 98, '物理': 89}
{'数学': 95, '语文': 89, '英语': 90, '生物': 98}

对 popitem() 的说明

其实,说 popitem() 随机删除字典中的一个键值对是不准确的,虽然字典是一种无须的列表,但键值对在底层也是有存储顺序的,popitem() 总是弹出底层中的最后一个 key-value,这和列表的 pop() 方法类似,都实现了数据结构中“出栈”的操作。

setdefault() 方法

setdefault() 方法用来返回某个 key 对应的 value,其语法格式如下:

dictname.setdefault(key, defaultvalue)

说明,dictname 表示字典名称,key 表示键,defaultvalue 表示默认值(可以不写,不写的话是 None)。

当指定的 key 不存在时,setdefault() 会先为这个不存在的 key 设置一个默认的 defaultvalue,然后再返回 defaultvalue。

也就是说,setdefault() 方法总能返回指定 key 对应的 value:
  • 如果该 key 存在,那么直接返回该 key 对应的 value;
  • 如果该 key 不存在,那么先为该 key 设置默认的 defaultvalue,然后再返回该 key 对应的 defaultvalue。

请看下面的代码:
  1. a = {'数学': 95, '语文': 89, '英语': 90}
  2. print(a)
  3. #key不存在,指定默认值
  4. a.setdefault('物理', 94)
  5. print(a)
  6. #key不存在,不指定默认值
  7. a.setdefault('化学')
  8. print(a)
  9. #key存在,指定默认值
  10. a.setdefault('数学', 100)
  11. print(a)
运行结果为:

{'数学': 95, '语文': 89, '英语': 90}
{'数学': 95, '语文': 89, '英语': 90, '物理': 94}
{'数学': 95, '语文': 89, '英语': 90, '物理': 94, '化学': None}
{'数学': 95, '语文': 89, '英语': 90, '物理': 94, '化学': None}

标签:攻略,Python,89,键值,key,90,print,dict,字典
From: https://www.cnblogs.com/qlsh/p/16800624.html

相关文章

  • Python类型转换,Python数据类型转换函数大全
    虽然 Python 是弱类型编程语言,不需要像 Java 或C语言那样还要在使用变量前声明变量的类型,但在一些特定场景中,仍然需要用到类型转换。比如说,我们想通过使用print()......
  • Python转义字符及用法
    在《Python字符串》一节中我们曾提到过转义字符,就是那些以反斜杠\开头的字符。ASCII编码为每个字符都分配了唯一的编号,称为编码值。在 Python 中,一个ASCII字符除了可......
  • Python算术运算符及用法详解
    算术运算符也即数学运算符,用来对数字进行数学运算,比如加减乘除。下表列出了 Python 支持所有基本算术运算符。表1Python常用算术运算符运算符说明实例结果+加1......
  • Python位运算符详解
    Python 位运算按照数据在内存中的二进制位(Bit)进行操作,它一般用于底层开发(算法设计、驱动、图像处理、单片机等),在应用层开发(Web开发、Linux运维等)中并不常见。想加快学习......
  • Python赋值运算符(入门必读)
    赋值运算符用来把右侧的值传递给左侧的变量(或者常量);可以直接将右侧的值交给左侧的变量,也可以进行某些运算后再交给左侧的变量,比如加减乘除、函数调用、逻辑运算等。Python......
  • Python比较运算符(关系运算符)
    比较运算符,也称关系运算符,用于对常量、变量或表达式的结果进行大小比较。如果这种比较是成立的,则返回True(真),反之则返回False(假)。True和False都是bool类型,它们专门......
  • Python逻辑运算符及其用法
    高中数学中我们就学过逻辑运算,例如p为真命题,q为假命题,那么“p且q”为假,“p或q”为真,“非q”为真。Python 也有类似的逻辑运算,请看下表:表1Python逻辑运算符及功能......
  • Python三目运算符(三元运算符)用法详解
    我们从一个具体的例子切入本节内容。假设现在有两个数字,我们希望获得其中较大的一个,那么可以使用ifelse语句,例如:ifa>b:max=a;else:max=b;但是 Python ......
  • 一篇搞定Python正则表达式
    ​1.正则表达式语法1.1字符与字符类1特殊字符:.^$?+*{}[]()|以上特殊字符要想使用字面值,必须使用进行转义2字符类  1.包......
  • 10个python经典小游戏(上)-五一嗨起来(动图演示+源码分享)
    这些游戏你玩过几个?​​1.贪吃蛇​​​​2.吃豆人​​​​3.加农炮​​​​4.四子棋​​​​5.FlyBird​​​​6.记忆:数字对拼图游戏(欢迎挑战!用时:2min)​​​​7.乒乓球​......