1

我有一本字典,例如: 对于每个键(A1 和 A2),我有一个在不同地方(T1 和 T2)购买的物品的列表,其中包含时间花费的金额。示例:人 A1 在时间步 1 消费 3.0,在超市 T1。

{'A1': {'T1': [1, 3.0, 3, 4.0], 'T2': [2, 2.0]}, 'A2': {'T1': [1, 0.0, 3, 5.0], 'T2': [2, 3.0]}}

我想做的是对每个子字典求和,以获得每个超市每个时间步的总花费:

A1 A2  A1 A2  A1 A2
T1+T1  T2+T2  T1+T1 (The lists are followed by: timestep + money spent)
 [3.0, 5.0, 9.0] <<<< output
   1    2    3
res 3.0 + 0.0 = 3.0  and 2.0 + 3.0 = 5.0 and  5.0 + 4.0 = 9.0

我怎样才能做到这一点?我试过了,但我已经造成了很大的混乱

输出:

[3.0, 5.0, 9.0]
4

1 回答 1

0

这是您问题的快速解决方案,但我建议您使用 dict 作为时间戳值来区分时间戳和值。

而不是这个:

{"A1": {"T1": [1, 3.0, 3, 4.0]}}

做这个: {"A1": {"T1": {1: 3.0, 3: 4.0}}}

import json

dict = json.loads('{"A1": {"T1": [1, 3.0, 3, 4.0], "T2": [2, 2.0]}, "A2": {"T1": [1, 0.0, 3, 5.0], "T2": [2, 3.0]}}')

result = {}
for person, supermarket in dict.items():
   for _, timestamped_values in supermarket.items():
      for i in range(len(timestamped_values)):
         if i % 2 == 0 and i < len(timestamped_values)-1:
            result.setdefault(timestamped_values[i], []).append(timestamped_values[i+1])

print(result)

结果是:

{1: [3.0, 0.0], 3: [4.0, 5.0], 2: [2.0, 3.0]}

只需将列表中的值相加即可获得结果。我会保持这种方式,以防您需要对时间戳值进行其他操作。

于 2020-03-13T15:14:36.933 回答