如何从Python字典中删除多个键

1,438 阅读4分钟

摘要: 你可以使用这些方法中的一种来删除字典中的多个键 Python -
(1) 遍历要删除的键的列表,使用语法del dict['key']
(2) 遍历要删除的键的列表,调用dictionary.pop(key)方法。
(3) 消除不需要的键,用字典理解法重建原始字典。
(4) 使用 map 和 pop 方法。

问题的提出

考虑到你有一个有某些键值对的 Python dictionary。你将如何从给定的dictionary 中删除多个键?

从 Python 字典中删除多个键会导致删除所有与指定的键有关的指定的键值对,使字典中只剩下那些没有被删除的键值对。让我们在一个例子的帮助下直观地了解这个问题。

例子

Given:

my_dictionary = {‘key_1’: ‘value_1’, ‘key_2’: ‘value_2’, ‘key_3’: ‘value_3’, ‘key_4’: ‘value_4’, ‘key_5’: ‘value_5’}

Challenge: Remove the keys: ‘key_1’ and ‘key_3’

Expected Output:

{‘key_2’: ‘value_2’, ‘key_4’: ‘value_4’, ‘key_5’: ‘value_5’}


闲话少说,让我们深入了解一下编程挑战的解决方案。

⦿方法1: 使用 "For Loop "和 "del "关键字

del 关键字和指定的键一起,允许我们从一个字典中删除元素。

方法 :把要删除的键存储在一个列表中,然后用一个'for 循环'来遍历其中的所有元素。现在用每个键访问给定字典中的元素,用 "del "关键字删除它们,语法如下。del dictinary[key]

代码

my_dictionary = {
    'key_1': 'value_1',
    'key_2': 'value_2',
    'key_3': 'value_3',
    'key_4': 'value_4',
    'key_5': 'value_5'
}
remove_keys = ['key_1', 'key_3']
for key in remove_keys:
    del my_dictionary[key]

print(my_dictionary)

输出

{'key_2': 'value_2', 'key_4': 'value_4', 'key_5': 'value_5'}

⦿ 方法 2: 使用 "for 循环 "和 "pop "关键字

方法:将 要删除的键存储在一个列表中。然后,在键的列表中使用 for 循环,在每次迭代时,调用dictionary.pop(key) 方法,从给定的字典中删除一个特定的键。

代码

my_dictionary = {
    'key_1': 'value_1',
    'key_2': 'value_2',
    'key_3': 'value_3',
    'key_4': 'value_4',
    'key_5': 'value_5'
}
remove_keys = ['key_1', 'key_3']
for key in remove_keys:
    my_dictionary.pop(key)

print(my_dictionary)

输出

{'key_2': 'value_2', 'key_4': 'value_4', 'key_5': 'value_5'}

单行本 :有一个更简洁的方法可以用一行代码来表述上面的解决方案。这里是如何做的。

# Given Data
my_dictionary = {
    'key_1': 'value_1',
    'key_2': 'value_2',
    'key_3': 'value_3',
    'key_4': 'value_4',
    'key_5': 'value_5'
}
# One-Liner
[my_dictionary.pop(key) for key in ['key_1', 'key_3']];print(my_dictionary)

⦿方法3:使用字典理解的单行解决方案

方法:使用字典理解法遍历字典中的所有键值,除了你想删除的键值,然后只在字典中存储所需的键值。因此,这种技术可以自动消除要从字典中删除的键值对。

代码

my_dictionary = {
    'key_1': 'value_1',
    'key_2': 'value_2',
    'key_3': 'value_3',
    'key_4': 'value_4',
    'key_5': 'value_5'
}
# One-liner
my_dictionary = {i: my_dictionary[i] for i in my_dictionary if i not in ['key_1', 'key_3']}
# Display result
print(my_dictionary)

输出

{'key_2': 'value_2', 'key_4': 'value_4', 'key_5': 'value_5'}

解释:让我们来剖析一下这个单行代码,了解它是如何工作的。这个表达式把不想删除的键值对存储在 dictionary 中。为了消除指定的键,我们有一个上下文变量 "i",它表示每个要被消除的键。for 循环允许你在条件if 语句的帮助下只考虑所需的键,这有助于你忽略指定的键。因此,你可以把它看作是一种消除和征服的技术!

一个使用类似逻辑的另一种表述如下。

my_dictionary = {
    'key_1': 'value_1',
    'key_2': 'value_2',
    'key_3': 'value_3',
    'key_4': 'value_4',
    'key_5': 'value_5'
}
my_dictionary= dict([(key, val) for key, val in my_dictionary.items() if key not in ['key_1', 'key_3']])
print(my_dictionary)

⦿ 方法4:使用pop和map

这可能不是最Pythonic的解决方案。然而,它解决了目的,并产生了我们想要的输出。

方法:我们的想法是在一个列表中存储要消除的键,然后使用map()方法。将dictionary.pop() 方法作为第一个参数传给map方法,而第二个参数应该是一个可迭代的,在这种情况下,第二个参数/可迭代的是包含要删除的键的列表。

代码

my_dictionary = {
    'key_1': 'value_1',
    'key_2': 'value_2',
    'key_3': 'value_3',
    'key_4': 'value_4',
    'key_5': 'value_5'
}
remove_keys = ['key_1', 'key_3']
list(map(my_dictionary.pop, remove_keys))
print(my_dictionary)

提示: map() 函数将一个或多个迭代表转化为一个新的迭代表,方法是对每个迭代表的第i个元素应用一个 "转化器函数"。参数是 转化器函数对象一个或多个迭代变量。如果你传递n个迭代变量作为参数,转化器函数必须是一个n次方函数,接受n输入参数。返回值是一个可迭代的map对象,该对象是经过转换的,也可能是聚合的元素。

结论

我们已经成功地征服了给定的编程挑战,并使用多达四种不同的方法解决了它。我希望这个教程对你有所帮助。 编码愉快!🙂