将字典元素组合成列表列表

Combining dictionary elements into a list of list

我有两本字典,内容为:

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

基本上单个列表不必重复字母两次,只需添加第二个数字即可。非常感谢任何帮助。

列表理解应该做到:

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

请注意,子列表的排序可能会有所不同,因为字典没有排序。

因为两个字典中的关键字相同:

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

您可以使用 list comprehension 将项目放入列表中。另外,在 dict 上使用 get() 方法,这样如果另一个字典中不存在键,它就不会抛出键错误。

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

Assuming you are using python 2.7.x

求理解

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

使用 List comprehension 的短小精悍:

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