用zip压缩多个字典列表的元素

时间:2014-06-30 02:30:20

标签: python dictionary zip

我有如下定义的字典键:

d['abc']=[1,2,3]
d['def']=[2,4,6]

zipped_list_1=zip()
zipped_list_1.append(d['abc'])
zipped_list_1.append(d['def'])

print zipped_list_1
[[1, 2, 3], [2, 4, 6]]<----I want to get [d['abc'],d['abc']] instead
print [sum(item) for item in zipped_list_1]
[6,12]<------------I want [(3),(6),(9)] instead

这是一个例子:Python: Sum of element for n-lists但它没有谈论dicts。

2 个答案:

答案 0 :(得分:1)

您构建zipped_list_1的方式不会产生您期望的结果。如果您确定作为词典元素的列表长度相等,则需要以下内容:

zipped_list_1 = zip(*d.values())
print [sum(item) for item in zipped_list_1]

d.values()返回dict元素的列表 - 在本例中为子列表,因此它的计算结果为[[1,2,3], [2,4,6]]。然后*运算符将其值作为位置参数分配给zip - 对于您列出的输入,它等同于调用zipped_list_1 = zip([1, 2, 3], [2, 4, 6])。这会在[[1, 2], [2, 4], [3, 6]]中为您zipped_list_1提供,因此sum列表理解将按预期运行。

答案 1 :(得分:0)

你可能想要这样的东西:

d = {}
d['a']=[1,2,3]
d['b']=[2,4,6]

zipped_list = zip(d['a'],d['b'])
print map(lambda x: sum(x), zipped_list)