从 Python 中的嵌套字典中删除键

从 Python 中的嵌套字典中删除键

Remove keys from a nested Dictionary in Python

从嵌套字典中删除键:

  1. 使用for循环遍历要删除的键集合。
  2. 从字典中删除所有直接键。
  3. 迭代字典的值并递归地删除指定的键。
主程序
def remove_nested_keys(dictionary, keys_to_remove): for key in keys_to_remove: if key in dictionary: del dictionary[key] for value in dictionary.values(): if isinstance(value, dict): remove_nested_keys(value, keys_to_remove) return dictionary my_dict = { 'address': { 'country': 'Finland', 'city': 'Oulu', }, 'name': 'Frank', 'age': 30, } # 👇️ {'address': {'country': 'Finland'}, 'name': 'Frank'} print(remove_nested_keys(my_dict, ['city', 'age']))
这个函数改变了原始字典。如果您更愿意使用更新的键值对创建新字典,请向下滚动到下一个副标题。

我们创建了一个可重用的函数,它接受一个字典和一个键列表,并从字典中删除指定的嵌套和非嵌套键。

第一步是遍历要删除的键列表。

主程序
for key in keys_to_remove: if key in dictionary: del dictionary[key]

在每次迭代中,我们检查字典中是否存在该键,如果满足条件,我们将删除该键。

与字典一起使用时,in运算符会检查对象中是否存在指定的键dict

for循环负责删除所有指定的非嵌套键。

下一步是迭代字典的值。

主程序
for value in dictionary.values(): if isinstance(value, dict): remove_nested_keys(value, keys_to_remove)

dict.values方法返回字典
值的新视图。

主程序
my_dict = {'id': 1, 'name': 'bobbyhadz'} print(my_dict.values()) # 👉️ dict_values([1, 'bobbyhadz'])
在每次迭代中,我们检查当前值是否是一个字典,如果满足条件,我们调用remove_nested_keys带有嵌套字典和要删除的键列表的函数。

然后该函数再次遍历键列表并使用该del
语句删除指定的键。

如果传入的对象是传入类的实例或子类,则isinstance
函数返回。
True

主程序
# 👇️ True print( isinstance({'site': 'bobbyhadz.com'}, dict) ) # 👇️ False print( isinstance(['a', 'b', 'c'], dict) )

该函数就地从嵌套字典中删除键。换句话说,它改变了原始dict对象。

从嵌套字典中删除键而不改变原始键

从嵌套字典中删除键:

  1. 使用for循环遍历字典的项目。
  2. 检查每个密钥是否不在要删除的密钥列表中。
  3. 如果当前键不是字典,则将键值对添加到新字典中。
  4. 如果键是字典,则递归调用该函数。
主程序
# ✅ function returns new dictionary (does NOT mutate original) def remove_nested_keys(dictionary, keys_to_remove): new_dict = {} for key, value in dictionary.items(): if key not in keys_to_remove: if isinstance(value, dict): new_dict[key] = remove_nested_keys(value, keys_to_remove) else: new_dict[key] = value return new_dict my_dict = { 'address': { 'country': 'Finland', 'city': 'Oulu', }, 'name': 'Frank', 'age': 30, } result = remove_nested_keys(my_dict, ['country', 'name']) print(result) # 👉️ {'address': {'city': 'Oulu'}, 'age': 30} result = remove_nested_keys(my_dict, ['city', 'age']) print(result) # 👉️ {'address': {'country': 'Finland'}, 'name': 'Frank'}

我们使用for循环来遍历字典的项目。

dict.items方法返回字典
项((键,值)对)的新视图。

主程序
my_dict = {'id': 1, 'name': 'BobbyHadz'} # 👇️ dict_items([('id', 1), ('name', 'BobbyHadz')]) print(my_dict.items())

在每次迭代中,我们检查当前键是否不是要删除的键之一。

主程序
for key, value in dictionary.items(): if key not in keys_to_remove: if isinstance(value, dict): new_dict[key] = remove_nested_keys(value, keys_to_remove) else: new_dict[key] = value

然后该isinstance()函数检查键是否指向字典值。

如果键存储字典,remove_nested_keys则使用嵌套字典和要删除的键列表调用该函数。

如果键不存储字典,则键值对将添加到新字典中。

该函数返回新构造的字典,不包括列表中的所有键。

发表评论