簡單的Python問題,但我正在摸索着回答問題!Python:檢索任意字典路徑並修改數據?
我有稱爲path
任意長度的字符串數組,像這樣:
path = ['country', 'city', 'items']
我也有一個字典,data
,和一個字符串,unwanted_property
。我知道字典具有任意深度,並且字典一直向下,除了items
屬性,它總是一個數組。
[澄清:這個問題的關鍵是我不知道path
的內容是什麼。他們可能是任何東西。我也不知道字典會是什麼樣子。我需要沿着路徑指示走下字典,然後從那裏刪除不需要的屬性,而不事先知道路徑的樣子,或者它將會有多長。]
我想檢索與path
匹配的數據對象的部分(如果有),然後從每個對象中刪除unwanted_property
。
因此,在上面的例子中,我想檢索:
data['country']['city']['items']
從每個陣列中的項目的
,然後刪除unwanted_property
。我想修改原始數據,而不是副本。 (澄清:我的意思是,我想用最初的字典結尾,只是減去不需要的屬性。)
我該如何在代碼中執行此操作?
我走了這麼遠:
path = ['country', 'city', 'items']
data = {
'country': {
'city': {
'items': [
{
'name': '114th Street',
'unwanted_property': 'foo',
},
{
'name': '8th Avenue',
'unwanted_property': 'foo',
},
]
}
}
}
for p in path:
if p == 'items':
data = [i for i in data[p]]
else:
data = data[p]
if isinstance(data, list):
for d in data:
del d['unwanted_property']
else:
del data['unwanted_property']
的問題是,這並沒有修改原始數據。它也依賴於items
始終是路徑中的最後一個字符串,這可能並非總是如此。
澄清:我的意思是,我想直到結束:
{
'country': {
'city': {
'items': [
{
'name': '114th Street'
},
{
'name': '8th Avenue'
},
]
}
}
}
而我在data
有可用的只有[{'name': '114th Street'}, {'name': '8th Avenue'}]
。
我覺得我需要像XPath這樣的字典。
當你說它不修改原始數據,你的意思是? '數據'沒有改變? –
@COLDSPEED我的意思是'data'現在只有'[{'name':'114th Street'},{'name':'8th Avenue'}]'而我希望它是完整的字典,只是減去不需要的財產。 – Richard
將一個新的變量'temp'指定給'data',然後用'temp'完成確切的事情。 –