假设我有两个词典列表
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文档。
所以这个解决方案有效,但它是最好的方法吗?
答案 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']
这样您只需对masterSensor
和sensor
中的所有元素进行一次迭代。
答案 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()))))