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()]