如何在python中从列表的目录中添加元素

如何在python中从列表的目录中添加元素,python,Python,给我一本清单字典 vd = {'A': [1,0,1], 'B':[-1,0,1], 'C':[0,1,1]} 我想添加lists元素。所以我想将列表A的第一个元素添加到列表B的第一个元素,反之亦然 复杂的是,你不能依赖于标签是A,B,C。它可以是任何东西。其次,词典的长度也是可变的。这里是3。但可能是30岁 我需要的结果是一个列表[0,1,3]所以您只想将所有的值按元素相加 [zip中l的总和(*vd.values())]简而言之: >>> map(sum, zip(*vd

给我一本清单字典

vd = {'A': [1,0,1], 'B':[-1,0,1], 'C':[0,1,1]}
我想添加lists元素。所以我想将列表A的第一个元素添加到列表B的第一个元素,反之亦然 复杂的是,你不能依赖于标签是A,B,C。它可以是任何东西。其次,词典的长度也是可变的。这里是3。但可能是30岁


我需要的结果是一个列表[0,1,3]

所以您只想将所有的值按元素相加

[zip中l的总和(*vd.values())]

简而言之:

>>> map(sum, zip(*vd.values()))
[0, 1, 3]

解释 给一本字典:

>>> vd = {'A': [1,0,1], 'B': [-1,0,1], 'C': [0,1,1]}
我们可以:

然后,他们站起来:

请注意,
zip
压缩每个参数;不需要列出一张清单就可以了。因此,我们需要
*
将列表解压为参数

如果我们只有一份清单,我们可以:

但是,我们有多个,因此我们可以:

总而言之:

>>> map(sum, zip(*vd.values()))
[0, 1, 3]

延伸到平均值而不是总和 这种方法也易于扩展;例如,我们可以很容易地使元素平均,而不是求和。为此,我们首先制作一个
average
函数:

def average(numbers):
    # We have to do the float(...) so it doesn't do an integer division.
    # In Python 3, it is not necessary.
    return sum(numbers) / float(len(numbers))
然后用
average
替换
sum

>>> map(average, zip(*vd.values()))
[0.0, 0.3333, 1.0]

我在没有*的情况下试过这个。神奇的是,zip()中的*比被接受的怪异地图解决方案要清晰得多。我会用这个解决方案来引导,然后解释它。你能代替求和找到平均值吗?@MySchizoBuddy:当然!我会把它添加到我的答案中;请稍等。@icktoofay您可以使用另一种(更详细的)好的解决方案,而不是
float
来代替
sum(数字,0.0)
运算符。您可能想补充一点,它将修改第一个元素,而my和nneonneo的解决方案不会!编辑我的代码,使其不会更改
vd
>>> map(sum, zipped)
[0, 1, 3]
>>> map(sum, zip(*vd.values()))
[0, 1, 3]
def average(numbers):
    # We have to do the float(...) so it doesn't do an integer division.
    # In Python 3, it is not necessary.
    return sum(numbers) / float(len(numbers))
>>> map(average, zip(*vd.values()))
[0.0, 0.3333, 1.0]
vd = {'A': [1,0,1], 'B':[-1,0,1], 'C':[0,1,1]}
vd_keys = list(vd.keys())
rt = vd[vd_keys.pop()].copy() # copy otherwise rt and vd[vd_keys.pop()] will get synced
for k in vd_keys:
    for i in range(len(rt)):
        rt[i] += vd[k][i]

print(rt)