Python2.7:基于2个字典列表中的一个键值查找公共元素

2024-09-29 09:32:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我的信号列表是

[
{'min_wert': 0L, 'aufloesung': u'0.01', 'signal_name': u'bsw_', 'max_wert': 33L},
{'min_wert': None, 'aufloesung': None, 'signal_name': u'bsw_v', 'max_wert': None},
{'min_wert': None, 'aufloesung': None, 'signal_name': u'fga_', 'max_wert': None},
{'min_wert': 0L, 'aufloesung': 1L, 'signal_name': u'can_', 'max_wert': 1L},
{'min_wert': None, 'aufloesung': None, 'signal_name': u'eps_', 'max_wert': None}
]

我的信号清单2是:

[
{'min_wert': 0L, 'aufloesung': u'0.01', 'signal_name': u'bsw_', 'max_wert': 33L},
{'min_wert': None, 'aufloesung': None, 'signal_name': u'bsw_v', 'max_wert': None},
{'min_wert': None, 'aufloesung': None, 'signal_name': None, 'max_wert': None},
]

我想要一个最终列表,其中包含列表1和列表2中的信号\u name。在这两个列表中都有bsw_bsw_v。最后的名单是:

[
{'min_wert': 0L, 'aufloesung': u'0.01', 'signal_name': u'bsw_', 'max_wert': 33L},
{'min_wert': None, 'aufloesung': None, 'signal_name': u'bsw_v', 'max_wert': None},
]

如何在python中尽可能少地使用代码


Tags: 代码namenone列表signal信号epsmin
2条回答

您可以使用列表控制:

l1 = [...] # First list
l2 = [...] # Second list
[k for k in l1 for m in l2 if k['signal_name']==m['signal_name']]

输出

[{'min_wert': 0L, 'aufloesung': u'0.01', 'signal_name': u'bsw_', 'max_wert': 33L}, 
{'min_wert': None, 'aufloesung': None, 'signal_name': u'bsw_v', 'max_wert': None}]

这是一种通过创建set作为查找的方法

Ex:

data_1 = [
{'min_wert': 0L, 'aufloesung': u'0.01', 'signal_name': u'bsw_', 'max_wert': 33L},
{'min_wert': None, 'aufloesung': None, 'signal_name': u'bsw_v', 'max_wert': None},
{'min_wert': None, 'aufloesung': None, 'signal_name': u'fga_', 'max_wert': None},
{'min_wert': 0L, 'aufloesung': 1L, 'signal_name': u'can_', 'max_wert': 1L},
{'min_wert': None, 'aufloesung': None, 'signal_name': u'eps_', 'max_wert': None}
]

data_2 = [
{'min_wert': 0L, 'aufloesung': u'0.01', 'signal_name': u'bsw_', 'max_wert': 33L},
{'min_wert': None, 'aufloesung': None, 'signal_name': u'bsw_v', 'max_wert': None},
{'min_wert': None, 'aufloesung': None, 'signal_name': None, 'max_wert': None},
]

check_val = {i['signal_name'] for i in data_2}                #Loopup.
result = [i for i in data_1 if i['signal_name'] in check_val]
print(result)

输出:

[{'aufloesung': u'0.01',
  'max_wert': 33L,
  'min_wert': 0L,
  'signal_name': u'bsw_'},
 {'aufloesung': None,
  'max_wert': None,
  'min_wert': None,
  'signal_name': u'bsw_v'}]

相关问题 更多 >