2017-04-20 81 views
0

的名單上有兩個詞典與內容:結合字典元素到列表

dct1 = {'NL': 7,'MC': 9, 'PG': 8} 
dct2 = {'NL': 2,'MC': 10,'PG': 6} 

你可以說這些代表來自遊戲裏的字母名稱和編號分數分數。兩個字典之間的差異是根據標準計算的數字。

現在我想將字典中的內容組合成一個列表。我將只提供我的代碼的一個粗略的想法。基本上我做了什麼然後轉向在兩個庫的內容轉換成列表的列表,其中:

L1 = [['NL',7],['MC',9],['PG',8]] 
L2 = [['NL',2],['MC',10],['PG',6]] 

爲把它們變成列表清單代碼:

L1 = [] 
for i, occurrences in dct1.items(): 
    L1.append([i,occurrences]) 
L2 = [] 
for j, occurrences in dct2.items(): 
    L2.append([j,occurrences]) 

,一旦我同時打印名單,我得到了我上面寫的。

但現在,而不是有兩個不同的名單,我想他們都合併成一個列表,我的輸出是:

L3 = [['NL',7,2],['MC',9,10],['PG',8,6]] 

基本上單一的名單沒有重複的字母兩次,只需添加第二位數字。任何幫助深表感謝。

+0

[轉換Python字典的T可能的複製o List](http://stackoverflow.com/questions/1679384/converting-python-dictionary-to-list) –

回答

9

一個列表理解應該做的:

lst = [[k, v, dct2[k]] for k, v in dct1.items()] 
print lst 
# [['NL', 7, 2], ['PG', 8, 6], ['MC', 9, 10]] 

注意子列表的順序是可以改變的,因爲字典是沒有順序的。

+1

哇..釘上它。 –

+0

@Moses Koledoye感謝一羣。它有幫助。我對列表理解不熟悉,但如果我們有3個或更多的字典而不是2個,那該怎麼辦?這種方法僅限於2個字典嗎? – Electric

+0

@Electric不,不是。只需將第3到第n的字典值添加到內部子列表中:[[k,v,dct2 [k],dct3 [k],...,dctn [k] for k,v in dct1.items() ]' –

1

作爲重要的是在這兩個字典一樣的:

>>> dct1 = {'NL': 7,'MC': 9, 'PG': 8} 

>>> dct2 = {'NL': 2,'MC': 10,'PG': 6} 
>>> L3 = [] 
>>> for key in dct1: 
...  L3.append([key, dct1[key], dct2[key]]) 
... 
>>> L3 
[['NL', 7, 2], ['PG', 8, 6], ['MC', 9, 10] 
0

您可以使用list comprehension把列表中的項目。此外,使用dict上的get()方法,以便在其他字典中不存在該鍵時不會拋出關鍵錯誤。

>>> [(key, val, dct1.get(key)) for key, val in dct2.items()] 
[('NL', 2, 7), ('PG', 6, None), ('MC', 10, 9)] 
0

Assuming you are using python 2.7.x

對於理解

L3 = [] 
for key, value in dct1.iteritems(): 
    L3.append([key, value, dct2[key]) 

OR

簡明扼要使用列表理解:

L3 = [[key, value, dct2[key]] for key, value in dct1.iteritems()]