在 Python 中对字典进行切片

Vaibhav Vaibhav 2023年1月30日 2022年5月18日
  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 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.

LinkedIn GitHub

相关文章 - Python Dictionary