2017-10-31 11 views
0

辞書のデータ値を辞書に保存したいが、エラーが出る。forループ内で辞書を保存する方法

mydict= {} 
for entity in entities: 
    if entity.entity_id.startswith('sensor'): 
     list = remote.get_state(api, entity.entity_id) 
     data = {list.attributes['friendly_name'] : list.state} 
     for key, val in data.items(): 
      mydict+= {key:val} 

次のエラーが発生しました。 1へ

mydict+= {key:val} 
TypeError: unsupported operand type(s) for +=: 'dict' and 'dict' 

答えて

4

反して直感的にエラーが示すように、+=オペレータは種類dict & dictのためにサポートされていない、と思うことがあります。辞書はリストと少し違っていて、+=は何らかの連結演算子のように機能しません。

しかし、+=演算子を使用する代わりに、次のスニペットのように内部forループスコープを更新してみてください。

mydict= {} 
for entity in entities: 
    if entity.entity_id.startswith('sensor'): 
     list = remote.get_state(api, entity.entity_id) 
     data = {list.attributes['friendly_name'] : list.state} 
     for key, val in data.items(): 
      mydict[key] = val 

また、以下のように一括更新することもできます。

mydict= {} 
for entity in entities: 
    if entity.entity_id.startswith('sensor'): 
     list = remote.get_state(api, entity.entity_id) 
     data = {list.attributes['friendly_name'] : list.state} 
     mydict.update(data) 
+0

これは、キーval forループの内部で変更する必要があることを意味しますか? データ= {list.attributes [ 'friendly_name']:list.state} data.itemsでキーの 、ヴァル(): mydict [キー] = valの – AhmyOhlin

+0

私はあなたにコード全体をカバーするために私のコードスニペットを更新誤解を避ける。 – ilim

+0

それが動作します。ありがとうございました。私は小さな質問があります。コメントのコードをコードとしてどのようにマークしましたか?私がctrl + kでそれをしたという質問で。コメントでは機能しません。 – AhmyOhlin

関連する問題