根据Python中的键匹配解压缩字典列表

时间:2015-05-11 13:17:26

标签: python dictionary

我正在寻找一种解压缩具有某个密钥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)放入主要“部分”字典中({1}中应该已存在TYPE匹配}字典)。

我的方法适用于单个返回的字典条目...

parts

...但是没有一本词典列表。

我希望最终得到一种符合......

的格式
parts[data['TYPE']].update(data)

3 个答案:

答案 0 :(得分:2)

您可update使用item代替data

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'}}

答案 1 :(得分:1)

我认为这就是你想要的,使用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

答案 2 :(得分:0)

'TYPE'不是data的索引。它是列表item中字典data的关键。你可以这样做:

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