簡體   English   中英

如何將嵌套字典從字典中提取到單個字典中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM