2017-12-22 11 views
0

気象データを収集し、最新の(温度)値を分単位で持つリストを作成しようとしています。jsonオブジェクトのリストに値を追加します。

リストに追加する場合、リストに「分インデックス」が含まれていない場合はリスト内の新しい要素として追加する必要があります。だから、リストは常に毎分最新の温度値を保持します:

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

辞書を繰り返し処理する必要がある場合は、どのような点がありますか?また、タイムスタンプをオンザフライで作成しています。 Key_already_が存在する確率はいくらですか? –

+0

なぜキーがない場合に例外をトリガーしたいのですか? –

+0

さらに、JSONと何が関係しているのか分かりません。 –

答えて

1

を取得していますが、と辞書dキー値を持つkvを関連付けます:

d[k] = v 

thi辞書の中に既に鍵kが存在するかどうかに関係なく、動作します。その場合、その値は「上書き」されます。あなたは、いくつかのキーを持つ辞書を更新したい場合は、あなたが.updateを使用して、辞書オブジェクトを渡すことができ、

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

、またはキー(および値と対応する値として名前付きパラメータ:我々は、このようにforループを書き換えることができます)。したがって、我々はそれを意味論的には同じだが、より多くの計算の労力を必要とするであろう:

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

として書くことができる。

しかし、辞書を反復処理する必要があるため、データを構造化する方法を再検討する必要があります。

関連する問題