代码之家  ›  专栏  ›  技术社区  ›  fUrious

将值附加到json对象列表

  •  0
  • fUrious  · 技术社区  · 8 年前

    我正在收集天气数据,并试图创建一个按分钟显示最新(温度)值的列表。

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

    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 回复  |  直到 8 年前
        1
  •  2
  •   willeM_ Van Onsem    8 年前

    您关联了 钥匙 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})

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

    尽管如此,由于您需要迭代字典,您可能应该重新考虑构建数据的方式。