在两个不同的列表中查找匹配的字典元素

时间:2015-11-11 13:23:59

标签: python list dictionary

假设我有两个词典列表

masterSensor = [dict.fromkeys(['MasterKey', 'ItemType', 'ItemK'])]
sensor = [dict.fromkeys(['SensorK', 'SensorId'])]

我想合并两个键ItemK和SensorK具有相同值的字典元素。新字典只需要包含masterkey和SensorID。

我确定有比使用双循环更有效的东西吗?

for ik in masterSensor:
    for sk in sensor:
         if ik['ItemK'] == sk['SensorK']:
                newDict.append({'MasterKey' : ik['MasterKey'], 'SensorId' : sk['SensorId']})
                #sensor.remove(sk)      this ends up removing every other item 
                #masterSensor.remove(ik) this ends up removing every other item

我也愿意接受反馈,因为词典列表不好或者可以做得不同吗?我是python的新手,只是创建一个脚本来编辑一些xml文档。

所以这个解决方案有效,但它是最好的方法吗?

2 个答案:

答案 0 :(得分:1)

如果'ItemK'中的每个'SensorK'都有匹配,那么您可以这样做:

new_dict = {}
for ik in masterSensor:
    new_dict[str(ik['ItemK'])] = {'MasterKey' : ik['MasterKey'], 'SensorId' : None}

for sk in sensor:
    new_dict[str(sk['SensorK'])]['SensorId'] = sk['SensorId']

这样您只需对masterSensorsensor中的所有元素进行一次迭代。

答案 1 :(得分:0)

也许这可以帮助...你可以简单地做一个值的交集: 如果您使用的是Python 2:

masterSensor.values() & sensors.values()

使用Python 3:

masterSensor = {'one': '1', 'two': '2', 'three': '3'}
sensor = {'oneone': '1', 'four': '4', 'five': '3'}
print(set(list(masterSensor.values())).intersection(set(list(sensor.values()))))