在 Python 中对字典进行切片
切片是指获得整体的一部分。在 Python、C、C++、Java、JavaScript 等所有编程语言中,切片是指获取字符串或列表的一部分。字符串和列表的连续部分称为子字符串和子数组。子序列是字符串或列表的非连续部分。
字典是一种包含键值对的数据结构。在字典中,一个可散列的唯一键指向一个值。值可以是任何东西;整数、浮点数、列表、元组、集合、字典等。字典在其他编程语言中通常被视为映射,但它们执行相同的任务。
对字典进行切片是指获取字典中存在的键值对的子集。通常,人们会使用所需键的列表从字典中过滤掉值。在本文中,我们将通过一些相关示例学习如何使用 Python 对字典进行切片。
在 Python 中使用字典理解对字典进行切片
给定一个包含键值对和所需键列表的非空字典,我们可以通过迭代字典并创建一个新字典来过滤掉所需的键值对。在迭代时,我们必须确保列表中的键是有效的并且可以在字典中找到。否则,程序会抛出烦人的异常。有关讨论的方法,请参阅以下 Python 代码。
import json
a = {
"C": 1.1,
"O": True,
"M": "HelloWorld",
"P": {"X": 1, "Y": 2, "Z": 3},
"U": 25,
"T": None,
"E": ["Python", "Is", "Beautiful"],
"R": [1, 2, 100, 200],
}
targets = ["C", "P", "U"]
result = {key: a[key] for key in a.keys() if key in targets}
print(json.dumps(result, indent=4))
输出:
{
"C": 1.1,
"P": {
"X": 1,
"Y": 2,
"Z": 3
},
"U": 25
}
a
变量保存字典,targets
变量是所有必需键的列表。为了创建一个新字典,我们遍历所有字典的键并检查它是否存在于 targets
中。如果是,我们将其添加到我们的新字典中。否则,我们跳过它。这行代码执行所有这些创建、过滤和检查。
result = {key: a[key] for key in a.keys() if key in targets}
这是一种内联语法或字典理解,用于迭代可迭代对象并结合 if
和 else
语句以添加更多逻辑并创建新对象。这句话可能看起来有点复杂,但相反,它真的很简单,展示了 Python 编程语言的美丽和强大。
上述 Python 代码更直接、更基本的等效 Python 代码如下。
import json
a = {
"C": 1.1,
"O": True,
"M": "HelloWorld",
"P": {"X": 1, "Y": 2, "Z": 3},
"U": 25,
"T": None,
"E": ["Python", "Is", "Beautiful"],
"R": [1, 2, 100, 200],
}
targets = ["C", "P", "U"]
result = {}
for key in a.keys():
if key in targets:
result[key] = a[key]
print(json.dumps(result, indent=4))
输出:
{
"C": 1.1,
"P": {
"X": 1,
"Y": 2,
"Z": 3
},
"U": 25
}
在 Python 中使用列表推导对字典进行切片
存储在字典中的键值对可以以列表的形式获取。给定一个目标列表,我们可以遍历这个列表列表并过滤掉目标列表中不存在的键。此外,我们可以使用过滤后的列表创建一个新字典。有关上述方法,请参阅以下 Python 代码。
import json
a = {
"C": 1.1,
"O": True,
"M": "HelloWorld",
"P": {"X": 1, "Y": 2, "Z": 3},
"U": 25,
"T": None,
"E": ["Python", "Is", "Beautiful"],
"R": [1, 2, 100, 200],
}
targets = ["C", "P", "U"]
result = {}
pairs = a.items()
for (key, value) in pairs:
if key in targets:
result[key] = value
print(json.dumps(result, indent=4))
输出:
{
"C": 1.1,
"P": {
"X": 1,
"Y": 2,
"Z": 3
},
"U": 25
}
items()
方法返回一个包含列表内键值对的可迭代对象。对于上述字典,pairs
变量如下所示。
dict_items(
[
("C", 1.1),
("O", True),
("M", "HelloWorld"),
("P", {"X": 1, "Y": 2, "Z": 3}),
("U", 25),
("T", None),
("E", ["Python", "Is", "Beautiful"]),
("R", [1, 2, 100, 200]),
]
)
使用 for
循环,pairs
变量中的值在 if
语句的帮助下被解包和过滤。然后将过滤后的值添加到新的 result
字典中。
上面讨论的所有示例都使用 json
模块来精美地打印字典的输出。请注意,json
模块与切片字典的实际逻辑无关,使用此模块完全是可选的。