根据字典的键更新Python字典中的列表

时间:2016-11-17 21:19:07

标签: python list dictionary

我创建了一个字典,根据可用的设备数量自动初始化,如下所示:

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),但它的工作方式也一样。 任何帮助或解释将不胜感激。

1 个答案:

答案 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, [])