2015-05-11 36 views
1

我正在尋找一種方法來解壓包含特定鍵ID的字典列表。我已經看到了很多基於關鍵值的例子,但沒有一個關鍵匹配。說我有一個函數的返回如下格式的字典...根據Python中的鍵匹配解壓字典列表

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

我現在嘗試如下所示,但我正在逐漸>>類型錯誤:列表索引必須是整數,而不是str的

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

以上參考parts是零件號碼的字典。我期待根據TYPE(在parts字典中已經有一個TYPE匹配項)將以下列表條目(例如,'Lev1': u'82', 'Marker': u'16', 'TYPE': u'139', 'Location': u'A')放入主「部分」字典中。

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

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 
    ... 
} 
+3

你的預期產出是什麼? –

+0

您正在索引列表'data'不是字典,而是'parts [item ['TYPE']]。update(data)'不會工作,除非每個鍵都存在 –

+0

@MikG,添加部分字典 –

回答

2

您可以用updateitem代替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'}} 
+0

感謝@Cyber​​的帖子,我想我是沿着正確的路線。再次感謝您的幫助 – MikG

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 
0

'TYPE'不是data索引。這是字典item在列表data中的關鍵。你可以做到這一點如下:

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