一学就废|Python基础碎片,字典(Dictionary)

字典

Python 中的字典是一种无序的可变容器模型,它以键值对(key - value)的形式存储数据,通过键来访问对应的值,就像一本字典通过词条(键)查找解释(值)一样。本文介绍字典常用的操作方法。

获取所有键

python 复制代码
a = {"1":1, "2":2, "3":3}
b = {"2":2, "3":3, "4":4}

a.keys()
['1', '3', '2']

获取键和值

python 复制代码
a = {"1":1, "2":2, "3":3}

a.items()
dict_items([('1', 1), ('2', 2), ('3', 3)])

查找相同键

python 复制代码
a = {"1":1, "2":2, "3":3}
b = {"2":2, "3":3, "4":4}

# 方法1
[_ for _ in a.keys() if _ in b.keys()]
['3', '2']

# 更好的方法
c = set(a).intersection(set(b))
list(c)
['3', '2']

# 或者
[_ for _ in a if _ in b]
['3', '2']

设置默认值

python 复制代码
# 直观但不推荐
d = {}
key = "foo"
if key not in d:
    d[key] = []


# 使用 d.setdefault(key[, default])
d = {}
key = "foo"
d.setdefault(key, [])
[]

d[key] = 'bar'
d
{'foo': 'bar'}

# 使用 collections.defaultdict
from collections import defaultdict
d = defaultdict(list)
d["key"]
[]

d["foo"]
[]

d["foo"].append("bar")
d
defaultdict(<class 'list'>, {'key': [], 'foo': ['bar']})

dict. setdefault(key ,default)如果 key 不在字典中,则返回其默认值。但是,如果键存在于字典中,则函数将返回其值。

python 复制代码
d = {}
d.setdefault("key", [])
[]

d["key"] = "bar"

d.setdefault("key", [])
'bar'

更新字典

python 复制代码
a = {"1":1, "2":2, "3":3}
b = {"2":2, "3":3, "4":4}

a.update(b)

a
{'1': 1, '3': 3, '2': 2, '4': 4}

合并两个字典

Python 3.4 或更低版本

python 复制代码
a = {"x": 55, "y": 66}
b = {"a": "foo", "b": "bar"}
c = a.copy()

c.update(b)
c
{'y': 66, 'x': 55, 'b': 'bar', 'a': 'foo'}

Python 3.5 或更高版本可以更简洁的写法

python 复制代码
a = {"x": 55, "y": 66}
b = {"a": "foo", "b": "bar"}

c = {**a, **b}

c
{'x': 55, 'y': 66, 'a': 'foo', 'b': 'bar'}

字典遍历

遍历所有键

可以使用字典的keys()方法来获取字典中所有的键,然后通过循环遍历这些键。

python 复制代码
my_dict = {'a': 1, 'b': 2, 'c': 3}
for key in my_dict.keys():
    print(key)

a
b
c

在 Python 中,直接对字典进行循环遍历(如for key in my_dict:),默认遍历的是字典的键。所以上面的代码可以简化为

python 复制代码
my_dict = {'a': 1, 'b': 2, 'c': 3}
for key in my_dict:
    print(key)

这种遍历方式在只需要字典的键,而不需要对应的值时比较有用。例如,要检查字典中是否包含某些特定的键。

遍历所有值

使用values()方法可以获取字典中所有的值,并进行遍历。

python 复制代码
my_dict = {'a': 1, 'b': 2, 'c': 3}
for value in my_dict.values():
    print(value)

1
2
3

这种方式适用于只关心字典中的值,而不需要键的情况。比如,要计算字典中所有值的总和(假设值为数字类型),可以使用这种遍历方式。

遍历所有键值对

通过items()方法可以同时获取字典的键和值,它返回一个包含键值对的可迭代对象,其中每个元素是一个元组(键,值)。

python 复制代码
my_dict = {'a': 1, 'b': 2, 'c': 3}
for key, value in my_dict.items():
    print(key, value)

a 1
b 2
c 3

或者通过遍历键,再通过获取对应的键的值。注意dict.get()和dict'key'的方式都可以,区别是get()方法当键不存在时,可以给默认值,dict'key'的方式会报错。

python 复制代码
my_dict = {'a': 1, 'b': 2, 'c': 3}
for key in my_dict.keys():
    print(key,my_dict.get(key,'默认值'))

a 1
b 2
c 3

# 或者
my_dict = {'a': 1, 'b': 2, 'c': 3}
for key in my_dict.keys():
    print(key,my_dict[key])

以上遍历方式在需要同时访问键和值的情况下非常有用,比如更新字典中的值或者将字典中的数据存储到其他数据结构中。

相关推荐
灯澜忆梦8 小时前
GO_并发编程---定时器
开发语言·后端·golang
-银雾鸢尾-9 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-9 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白10 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
麻雀飞吧10 小时前
最新量化学习路径,交易认知和技术实现要并行
人工智能·python
段一凡-华北理工大学12 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe12 小时前
C++——多态
开发语言·c++
心平气和量大福大13 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
从零开始的代码生活_14 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸14 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++