如何从字典中提取嵌套字典到单个字典?



我有一个字典,其中包含一些键值对作为字符串,但一些键值是字典。数据如下所示:

{'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}。同样的事情也发生在维度key->中,以提取所有嵌套的字典,这样可以更容易地转换为最终的数据帧。

你可以定义一个递归的flatten函数,当字典值是字典时调用。

假设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

最新更新