我必須使用在 python 'my_dict' 中填充數字的嵌套字典,以及一個指定必須洗掉的子鍵 'keys' 的串列:
keys=[1,9]
my_dict={1:{1:a, 2:b}, 2:{1:c, 3:d, 9:e}}
我想要兩個結果:
如果它們在鍵中,則洗掉所有子鍵 它們的值,例如
new_dict={1:{2:b}, 2:{3:d}}
或者如果它們不在鍵中,則洗掉所有子鍵 它們的值,例如
new_dict:{1:{1:a}, 2:{1:c,9:e}}
我努力了:
new_list = {outer_k: {inner_k: inner_v for inner_k, inner_v in outer_v.items()-{1,9}} for outer_k, outer_v in my_dict.items()}
它在不洗掉元素的情況下給了我相同的字典,與第二個場景相同
new_list = {outer_k: {inner_k: inner_v for inner_k, inner_v in outer_v.items()&{1,9}} for outer_k, outer_v in my_dict.items()}
我也試過:
for key, value in my_dict.items():
for key1, value1 in value.items():
for key1 in keys:
try:
del dict[key1]
except KeyError:
pass
這給了我錯誤:
TypeError: 'type' object does not support item deletion
如果有人知道一個巧妙的解決方案,我會很高興!
uj5u.com熱心網友回復:
使用 dict 理解:
new_dict = {k_out : {k_in : v_in for k_in, v_in in v_out.items() if k_in in keys} for k_out,v_out in my_dict.items()}
uj5u.com熱心網友回復:
錯誤TypeError: 'type' object does not support item deletion源于
for key, value in my_dict.items(): for key1, value1 in value.items(): for key1 in keys: try: del dict[key1] # this is the build in, not your instance # fix: del my_dict[key1] except KeyError: pass
至于理解-它們看起來相當長....
keys = [1,9]
my_dict = {1:{1:"a", 2:"b"}, 2:{1:"c", 3:"d", 9:"e"}}
# delete top levels
# for unwanted_key in keys:
# try:
# del my_dict[unwanted_key]
# except KeyError:
# pass
# delete inside sub levels
for unwanted_key in keys:
for inner_key in my_dict:
try:
del my_dict[inner_key][unwanted_key]
except KeyError:
pass
print( my_dict)
結果是
# {2: {3: 'd'}} # if you do top level and sub level
{1: {2: 'b'}, 2: {3: 'd'}} # if you only do sub levels
以下“請求原諒而不是許可” -try: ... except: ...解釋
uj5u.com熱心網友回復:
對于您的示例,我重新創建了可運行的資料,但是直接從您正在迭代的字典中洗掉會引發錯誤,您可以通過創建字典的副本來執行此操作,您的結果將被存盤在其中
keys=[1,9]
my_dict={1:{1:"a", 2:"b"}, 2:{1:"c", 3:"d", 9:"e"}}
my_dict
new_dict1=my_dict.copy()
for key, value in my_dict.items():
if key1 in value.keys() and key1 in keys:
# delete subkeys and their sub values
del new_dict1[key][key1]
uj5u.com熱心網友回復:
您可以像這樣就地修改my_dict :
keys = [1, 9]
my_dict = {1: {1: 'a', 2: 'b'}, 2: {1: 'c', 3: 'd', 9: 'e'}}
for v in my_dict.values():
for k in keys:
if k in v:
del v[k]
print(my_dict)
輸出:
{1: {2: 'b'}, 2: {3: 'd'}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453485.html
