我有一本字典:
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
...
当我想要执行两种不同的操作时......
谢谢!
答案 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()
]
)
您的后续问题需要实际编写循环,因为您不是简单地添加(或执行类似的累积操作)数字列表。而是从第一个中减去第二个数字。由于订单很重要,如上所示,列表理解不会起作用。