在 Python 中对字典进行切片

Vaibhav Vaibhav 2023年1月30日
  1. 在 Python 中使用字典理解对字典进行切片
  2. 在 Python 中使用列表推导对字典进行切片
在 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}

这是一种内联语法或字典理解,用于迭代可迭代对象并结合 ifelse 语句以添加更多逻辑并创建新对象。这句话可能看起来有点复杂,但相反,它真的很简单,展示了 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 模块与切片字典的实际逻辑无关,使用此模块完全是可选的。

作者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

相关文章 - Python Dictionary