我创建了一个字典,根据可用的设备数量自动初始化,如下所示:
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)
你可能注意到我为每个设备初始化或“键入”一个空列表作为值。之后我想为每个列表附加不同的项目因此我创建了这个使用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'device1': [u'item1']}
{device1': [u'item1', u'item2']}
{device1': [u'item1', u'item2', u'item3']}
然后当出现新设备时会发生这种情况:
{u'device2': [u'item1_d2], u'device1': []}
{u'device2': [u'item1_d2, u'item2_d2'], u'device1': []}
...
我试过self.dictLists.setdefault(k, []).append(item)
,但它的工作方式也一样。
任何帮助或解释将不胜感激。
答案 0 :(得分: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
相反,您只需将device
的值添加到self.dictLists
key
,默认值为[]
。使用dict.setdefault()
作为:
self.dictLists.setdefault(device, [])