簡體   English   中英

根據Python中的鍵匹配解壓縮字典列表

[英]Unpacking a list of dictionaries based on key matches in Python

我正在尋找一種解密具有特定密鑰ID的字典列表的方法。 我已經看到很多基於鍵值的例子,但只是一個關鍵的匹配。 假設我有一個函數返回的以下格式的字典...

data = [{'Lev1': u'82', 'Marker': u'16', 'TYPE': u'139', 'Location': u'A'},
        {'Lev2': u'652', 'Marker': u'1', 'TYPE': u'140', 'Location': u'C'},
        {'Lev3': u'452', 'Marker': u'188', 'TYPE': u'141', 'Location': u'B'}]

我目前的嘗試如下所示,但我得到>> TypeError:list indices必須是整數,而不是str

for item in data:
    parts[data['TYPE']].update(data)

上面的parts參考是零件編號的字典。 我希望刪除以下每個列表條目(例如, 'Lev1': u'82', 'Marker': u'16', 'TYPE': u'139', 'Location': u'A' )基於TYPE進入主'部分'字典( parts字典中應該已經存在TYPE匹配)。

我的方法適用於單個返回的字典條目...

parts[data['TYPE']].update(data)

......但是沒有一本詞典列表。

我希望最終得到一種格式......

parts{
    125:
    ...
    ...
    ...
    139:{
        'Lev1': u'82', 
        'Marker': u'16', 
        'TYPE': u'139', 
        'Location': u'A'
        plus other previously gathered data
        }

    140:{
        'Lev2': u'652', 
        'Marker': u'1', 
        'TYPE': u'140', 
        'Location': u'C'
        plus other previously gathered data
        }

    141:{
        'Lev3': u'452', 
        'Marker': u'188', 
        'TYPE': u'141', 
        'Location': u'B'
        plus other previously gathered data
        }
    142:etc
    ...
}

您可以使用item而不是data進行update

for item in data:
    parts[item['TYPE']].update(item)

結果

>>> parts
{'141': {'Lev3': '452', 'TYPE': '141', 'Marker': '188', 'Location': 'B'},
 '140': {'Lev2': '652', 'TYPE': '140', 'Marker': '1', 'Location': 'C'},
 '139': {'Lev1': '82', 'Marker': '16', 'Location': 'A', 'TYPE': '139'}}

我認為這是你想要的,使用item['TYPE']作為關鍵匹配。 你應該使用item而不是data

for item in data:
    if isinstance(parts, dict):
        # when there is a dictionary in parts with key=item['TYPE'], update it
        if parts.get(item['TYPE']):
            parts[item['TYPE']].update(item)
        # when there is nothing in parts with key=item['TYPE'], add item to it
        else:
            parts[item['TYPE']]=item

'TYPE'不是data索引。 它是列表data中字典item的關鍵。 你可以這樣做:

for item in data:
    if item['TYPE'] in parts:
        parts[item['TYPE']].update(item)
    else:
        parts[item['TYPE']]=item

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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