我正在收集天气数据并尝试创建一个具有最新(温度)值的列表。
我想将它们添加到列表中,如果列表中不包含“分钟索引”,它应该作为列表中的新元素。因此列表始终保持每分钟的最新温度值:
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'**
答案 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})
在语义上是相同的,但需要更多的计算工作。
然而,由于你需要迭代字典,你或许应该重新考虑你构建数据的方式。