将值附加到json对象列表

时间:2017-12-22 10:49:54

标签: python json list

我正在收集天气数据并尝试创建一个具有最新(温度)值的列表。

我想将它们添加到列表中,如果列表中不包含“分钟索引”,它应该作为列表中的新元素。因此列表始终保持每分钟的最新温度值:

def AddValue(arr, value):
    timestamp = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M")

    for v in arr['values']:
        try:
            e = v[timestamp]     # will trigger the try/catch if not there
            v[timestamp] = value
        except KeyError:
            v.append({ timestamp: value })

history = [
    { 'values': [ {'2017-12-22 10:20': 1}, {'2017-12-22 10:21': 2}, {'2017-12-22 10:22': 3} ] },
]

AddValue(history, 99)

然而,我正在

AttributeError: 'dict' object has no attribute 'append'**

1 个答案:

答案 0 :(得分:2)

您将密钥 k与字典v中的 d关联起来:

d[k] = v

无论是否已存在密钥k,这都有效。如果发生这种情况,该值将被“覆盖”。因此,我们可以将for循环重写为:

for v in arr['values']:
    v[timestamp] = value

如果您想要使用多个键更新字典,可以使用.update并传递字典对象或命名参数作为键(以及相应的值作为值)。所以我们可以把它写成:

for v in arr['values']:
    v.update({timestamp: value})

在语义上是相同的,但需要更多的计算工作。

然而,由于你需要迭代字典,你或许应该重新考虑你构建数据的方式。