現在已經有些日子了,我正在尋找解決我的問題的辦法。我不會涉及到我到目前為止所嘗試的所有事情,而只是解釋我的問題。
這是我的兩個輸入:
這是我的兩個輸入。
unused_field_list = ['a。 b'/span>, 'b.d.y'/span>, 'c.g'/span>, 'z'/span>]
my_dictionnary =
{
"a": {
"b"/span>: {
"key": "value"。
},
"c"/span>: {
"f": {
"key": "value": "key".
}
}
},
"b": {
"d": {
"y": {
"key": "value": "key".
}
},
"g"/span>: {
"key": "value": "key".
}
},
"c"/span>: {
"g" : {
"key": "value""z"/span>: {
"key": "value": "key".
}
}
這是我想要的輸出結果:
{
"a"/span>: {
"c"/span>: {
"f": {
"key": "value": "key".
}
}
},
"b"/span>: {
"g": {
"key": "value": "key".
}
}
}
所以我試圖實作的是將我的unused_field_list中的 "key "從我的字典中移除。這不是強制性的,但另一個好處是,如果一個鍵不包含較低級別的鍵,也要完全洗掉(就像我的例子中的b.d和c鍵的情況。dict的深度是事先不知道的,而且是變化的。
我認為這不是一個簡單的方法可以做到的,但我真的希望有一種方法可以很簡單地做到這一點。
uj5u.com熱心網友回復:
你可以使用遞回法:
paths = ['a. b'/span>, 'b.d.y'/span>, 'c.g'/span>, 'z'/span>]
d = {'a'/span>: {'b'/span>: {'key'/span>: None}, 'c'/span>: {'f'/span>: {'key'/span>: None}}, 'b'/span>: {'d'/span>: {'y'/span>: {'key': 'value'}}, 'g': {'key': 'value'}}, 'c'/span>: {'g': {'key': 'value'}}, 'z': {'key': 'value'}}}。
def rm_d(d, p = []):
if not isinstance(d, dict)。
return d
r = {a:rm_d(b, p [a]) for a, b in d. items() if '.'.join(p [a]) not in paths }
return {a:b for a, b in r. items() if not isinstance(b, dict) or b}。
print(rm_d(d))
輸出:
{'a'/span>: {'c'/span>: {'f'/span>: {'key'/span>: None}}, 'b'/span>: {'g'/span>: {'key'/span>: 'value'}}}。
uj5u.com熱心網友回復:
unused_field_list = ['a. b'/span>, 'b.d.y'/span>, 'c.g'/span>, 'z'/span>]
my_dictionnary = {
"a": {
"b"/span>: {
"key": "value"。
},
"c"/span>: {
"f": {
"key": "value": "key".
}
}
},
"b": {
"d": {
"y": {
"key": "value": "key".
}
},
"g"/span>: {
"key": "value": "key".
}
},
"c"/span>: {
"g" : {
"key": "value""z"/span>: {
"key": "value": "key".
}
}
def filter_dict(node, filter=None, path=None)。)
if type(node) != dict:
return node
res = {}
if filter is None:
過濾器 = []
if path is None:
path = "".
for k, v in node.items()。
subpath = f"{path}.{k}" if path ! = "" else k
if subpath not in filter:
subnode = filter_dict(v, filter, subpath)
if subnode !={}:
res [k] = subnode
return res
res = filter_dict(my_dictionnary, unused_field_list)
print(res)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/311636.html
標籤:
上一篇:在可能出現嵌套的dict或list的情況下,我如何使用dictionarycomprehensions?
下一篇:從資料框架中創建一個字典
