Python字典操作详解:增删改查、合并与多键值处理

小林子
小林子
发布时间:2026-10-13 | 7人浏览过
原创

本文详解Python字典的核心操作,涵盖值的增删改查、遍历方法以及标准运算符的使用。重点解析两种字典合并策略及其在键冲突时的行为差异,包括TypeError报错场景。此外,深入探讨字典反转技巧,并对比List、子字典和Set三种方案实现多键值存储的异同,帮助开发者高效处理复杂数据结构。

Python字典基础操作

在Python中,字典(dictionary)是一种通过键值对存储数据的核心数据结构。其基本赋值语法为 dictionaryName[key] = value,即通过指定键名来关联对应的值。

向现有字典中新增一项数据,可以直接使用赋值语句。若键已存在,则更新该键对应的值;若键不存在,则创建新的键值对。


访问字典中的值时,直接通过方括号指定键名即可获取对应值,例如 dictionaryName[key]。若键不存在,此操作会引发 KeyError 异常,建议结合 get() 方法使用以提供默认值。


删除字典中的某一项,可使用 del 语句指定键名,或使用 pop() 方法移除并返回该键对应的值。若需清空整个字典,可使用 clear() 方法。


遍历字典时,默认迭代的是字典的键。若需同时访问键和值,可结合 items() 方法或使用 keys() 和 values() 方法分别获取键列表和值列表进行遍历。


在遍历字典的键值对时,推荐使用 items() 方法,它返回一个包含键值对的视图对象。通过解包语法,可以方便地在循环中同时获取 key 和 value,这是处理字典内容最常用的方式。


字典支持多种标准操作符,包括相等性判断(==)、成员资格检查(in)等。这些操作符允许开发者对字典进行逻辑比较和条件判断,是构建复杂逻辑的基础。


判断一个键是否存在于字典中,可使用 in 关键字。语法为 key in dictionaryName,若键存在返回 True,否则返回 False。这是避免 KeyError 异常的安全检查手段。


Python字典提供了丰富的内置方法,如 keys()、values()、items() 用于获取视图,get() 用于安全取值,update() 用于合并字典等。熟练掌握这些方法能显著提升代码效率。



字典合并策略与键冲突处理

将两个字典合并是常见需求。Python提供了多种合并策略,包括使用 update() 方法、字典解包语法(**)或构造新字典。不同方法在处理重复键时的行为存在差异,需根据场景选择。


a={'a':1,'b':2,'c':3}
b= {'aa':11,'bb':22,'cc':33}
#方法一
print(dict(a,**b))
#方法二 这其实就是在内存中创建两个列表,再创建第三个列表,拷贝完成后,创建新的dict,删除掉前三个列表。这个方法耗费性能,而且对于python3,这个无法成功执行,因为items()返回是个对象。
print(dict(list(a.items())+list(b.items())))
#方法三
c={}
c.update(a)
c.update(b)
print(c)
#方法四 python 3.5支持,可以存在重复键值,比如说:a={'a':1,'b':2,'c':3,'aa':12}会报错TypeError: print() got multiple values for keyword argument 'aa'
print(**a,**b)
 
他们的输出结果都是:
{'bb': 22, 'cc': 33, 'aa': 11, 'a': 1, 'b': 2, 'c': 3}

注意如果存在相同键值,比如说:当两个字典包含相同的键时,合并操作的结果取决于所采用的具体方法,后出现的值通常会覆盖先前的值。

a={'a':1,'b':2,'c':3,'aa':12} b= {'aa':11,'bb':22,'cc':33}

那么方法一\二\三得到结果为

{'cc': 33, 'a': 1, 'bb': 22, 'c': 3, 'b': 2, 'aa': 11}

而方法四则会报错:

TypeError: print() got multiple values for keyword argument ‘aa'

字典键值互换技巧

10、key和value互换

方法一:


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
dict_ori = {'A':1, 'B':2, 'C':3}
dict_new = {value:key for key,value in dict_ori.items()}
print(dict_new)

{1: ‘A', 2: ‘B', 3: ‘C'}

方法二:

使用zip方法


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
dict_ori = {'A':1, 'B':2, 'C':3}
dict_new2= dict(zip(dict_ori.values(), dict_ori.keys()))
print(dict_new2)

{1: ‘A', 2: ‘B', 3: ‘C'}

字典多键值存储方案对比

11、字典多键值及重复键值的使用方法(详解)

方案一


#encoding=utf-8
print ('中国')
#字典的一键多值
print('方案一 list作为dict的值 值允许重复' )
 
d1={}
key=1
value=2
d1.setdefault(key,[]).append(value)
value=2
d1.setdefault(key,[]).append(value)
print (d1)
#获取值
print ('方案一 获取值')
print (list(d1[key]) )
print( '方案一 删除值,会留下一个空列表' )
d1[key].remove(value)
d1[key].remove(value)
print (d1 )
print ('方案一 检查是否还有一个值' )
print (d1.get(key,[]) )

方案一输出结果

中国 方案一 list作为dict的值 值允许重复 {1: [2, 2]} 方案一 获取值 [2, 2] 方案一 删除值,会留下一个空列表 {1: []} 方案一 检查是否还有一个值 []

方案二


print ('方案二 使用子字典作为dict的值 值不允许重复')
d1={}
key=1
keyin=2
value=11
d1.setdefault(key,{})[keyin]=value
keyin=2
value=22
d1.setdefault(key,{})[keyin]=value
keyin=3
value=33
d1.setdefault(key,{})[keyin]=value
print (d1 )
print ('方案二 获取值' )
print (list(d1[key]) )
print ('方案二 删除值,会留下一个空列表' )
del d1[key][keyin]
keyin=2
del d1[key][keyin]
print (d1)
print ('方案二 检查是否还有一个值')
print (d1.get(key,()) )

方案二输出结果

方案二 使用子字典作为dict的值 值不允许重复 {1: {2: 22, 3: 33}} 方案二 获取值 [```2, 3] 方案二 删除值,会留下一个空列表 {1: {}} 方案二 检查是否还有一个值 {}

方案三


print ('方案三 使用set作为dict的值 值不允许重复')
d1={}
 
key=1
value=2
d1.setdefault(key,set()).add(value)
value=2
d1.setdefault(key,set()).add(value)
value=3
d1.setdefault(key,set()).add(value)
print ('方案三 获取值' )
print (list(d1[key]) )
print ('方案三 删除值,会留下一个空列表')
d1[key].remove(value)
value=2
d1[key].remove(value)
print (d1 )
print ('方案三 检查是否还有一个值' )
print (d1.get(key,()) )

输出结果:

方案三 使用set作为dict的值 值不允许重复 {1: {2, 3}} 方案三 获取值 [2, 3] 方案三 删除值,会留下一个空列表 {1: set()} 方案三 检查是否还有一个值 set()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表