[英]extract data from dictionary with nested dictionaries that contain lists that contain dictionaries
[英]How to extract nested dictionaries from dictionary into single dictionary?
我有一個字典,其中包含一些鍵值對作為字符串,但一些鍵值是字典。 數據如下所示:
{'amount': 123,
'baseUnit': 'test',
'currency': {'code': 'EUR'},
'dimensions': {'height': {'iri': 'http://www.example.com/data/measurement-height-12345',
'unitOfMeasure': 'm',
'value': 23},
'length': {'iri': 'http://www.example.com/data/measurement-length-12345',
'unitOfMeasure': 'm',
'value': 8322},
'volume': {'unitOfMeasure': '', 'value': 0},
'weight': {'iri': 'http://www.example.com/data/measurement-weight-12345',
'unitOfMeasure': 'KG',
'value': 23},
'width': {'iri': 'http://www.example.com/data/measurement-width-12345',
'unitOfMeasure': 'm',
'value': 1}},
'exportListNumber': '1234',
'iri': 'http://www.example.com/data/material-12345',
'number': '12345',
'orderUnit': 'sdf',
'producerFormattedPID': '12345',
'producerID': 'example',
'producerNonFormattedPID': '12345',
'stateID': 'm70',
'typeID': 'FERT'}
對於維度和價格鍵,有一些嵌套字典作為值。 我怎樣才能提取該數據,以便最終變量是一個只有鍵值作為字符串的字典。 對於價格,我需要類似的東西: {'pricecurrencycode':'EUR','priceamount':123}
而不是'price': {'currency': {'code': 'EUR'}, 'amount': 123}
。 同樣的事情發生在維度鍵->中,以提取所有嵌套的字典,這樣就可以更容易地轉換成最終的 dataframe。
您可以定義一個遞歸flatten
function,只要字典值為字典,它就會被調用。
假設python>=3.9
:
def flatten(my_dict, prefix=""):
res = {}
for k, v in my_dict.items():
if isinstance(v, dict):
res |= flatten(v, prefix+k)
else:
res[prefix+k] = v
return res
對於舊的 python 版本,一個稍微更詳細的選項:
def flatten(my_dict, prefix=""):
res = {}
for k, v in my_dict.items():
if isinstance(v, dict):
for k_flat, v_flat in flatten(v, prefix+k).items():
res[k_flat] = v_flat
else:
res[prefix+k] = v
return res
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.