在python字典中添加与一个键对应的值

时间:2014-03-19 01:42:18

标签: python dictionary tuples

我有一本字典:

d = {'0.766': [('8.0', '-58.47'), ('192.0', '-83.41')], '0.094': [('26.0', '112.01'), ('46.0', '110.19')], '0.313': [('14.0', '75.52'), ('48.0', '77.07')]}

我想在元组中添加相应的值,因此输出如下:

key, sum of 1st values in tuple, sum of 2nd values in tuple
0.766, 200.0, -141.88
0.094, 72.0, 222.20
...

有一种简单的方法吗?到目前为止,我找到了总和(d.values()),但它并没有完全符合我的意愿......

干杯, 凯特

PS。现在我也想知道如何得到输出,如:

key, sum of 1st values in tuple, DIFFERENCE of 2nd values in tuple
0.766, 200.0, 24.94
0.094, 72.0, 1.82
...

当我想要执行两种不同的操作时......

谢谢!

2 个答案:

答案 0 :(得分:2)

print [(k,) + tuple(sum(map(float, item)) for item in zip(*d[k])) for k in d]
# [('0.766', 200.0, -141.88),
#  ('0.313', 62.0, 152.58999999999997),
#  ('0.094', 72.0, 222.2)]

我们上面所说的是列表理解。它实际上与此类似,但是以有效的方式

result = []
for k in d:
    temp = tuple()
    for item in zip(*d[k]):
        temp += (sum(map(float, item)),)
    result.append((k,) + temp)
print result

要处理您在编辑过的问题中提到过的案例,您可以执行以下操作

result = []
for k in d:
    temp = tuple()
    fir, sec = zip(*d[k])
    fir, sec = sum(map(float, fir)), reduce(lambda i,j: float(i)-float(j), sec)
    result.append((k,) + (fir, sec))
print result

答案 1 :(得分:0)

我认为这个答案可能更直观一些。它不使用" *"这对我来说很困惑:

print "\n".join(
    [
        "%s, %s, %s" % 
        (
            i, 
            sum([float(j[0]) for j in d[i]]), 
            sum([float(j[1]) for j in d[i]]),
        ) 
        for i in d.keys()
    ]
)

您的后续问题需要实际编写循环,因为您不是简单地添加(或执行类似的累积操作)数字列表。而是从第一个中减去第二个数字。由于订单很重要,如上所示,列表理解不会起作用。