2016-11-17 15 views
0

に応じて、私は次のように使用可能なデバイスの数に応じて自動的に初期化された辞書を作成しましたvalue.Afterとして空のリストこの私は、各リストは、それゆえ私はself.dictListsを使用して、この機能を作成し、次のように対応するデバイスのための項目を追加しようとしたさまざまなアイテムを追加したい:更新リストは、辞書のキー

 for k, v in self.dictLists.iteritems(): 
      if k in item: # the item contain already the device name therefore i check here if the device name is in the item and then i append it to the list of the corresponding device 
        v.append(items) 
     print self.dictLists 

期待どおりに動作しますが、ありません!何が起こるかは、異なるデバイスに属する新しいアイテムが現れるとすぐに、以前のデバイスアイテムが削除され、新しいデバイスリストのみが満たされるからです。おそらくprint self.dictListsの出力が問題の理解に役立つでしょう。

{u'device2': [u'item1_d2], u'device1': []} 
{u'device2': [u'item1_d2, u'item2_d2'], u'device1': []} 
    ... 

私はself.dictLists.setdefault(k, []).append(item)と試みたが、それは同様に同じように動作します:新しいデバイスが表示されたときに

{u'device1': [u'item1']} 
{device1': [u'item1', u'item2']} 
{device1': [u'item1', u'item2', u'item3']} 

、これが起こります。 何か助けや説明をいただければ幸いです。あなたの関数で

+3

ここで述べたコードはうまくいきます。あなたが共有していないコードのどこかに問題があります。 –

+0

あなたはそれが商品や何かに関連していることを意味しますか?なぜなら、それらのアイテムは自動的に別の機能を形成し、それぞれにはそのデバイスが属するデバイス名が付いているからです。 – TJR

+0

私の感覚が言う通り、あなたはあなたのdict 'self.dictLists'を初期化する部分を再呼び出ししています。しかし、私がコードを見ていないので、私は間違っているかもしれません、そして、これらが呼び出される順序。 –

答えて

0

def _sensors_discovery(self,con, req): 
    if self.sensors[0] in con.labels: 
     device = con.resourceName 
     if device not in self.device_list: # get all the devices 
      self.device_list.append(device) 
      self.dictLists = dict((key, []) for key in self.device_list) 
      #^^^Here you are re-initializing the dict 

は代わりに、あなただけの[]としてデフォルト値でkeyようself.dictListsdeviceの値を追加する必要があります。そのためにdict.setdefault()を次のように使用してください:

self.dictLists.setdefault(device, []) 
関連する問題