我的信号清单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}
]
我的信号清单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},
]
我想要一个最终列表,该列表包含list1和list2中的 signal_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中的代码来做到这一点?
答案 0 :(得分:1)
您可以使用列表cmprehension:
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}]
答案 1 :(得分:1)
这是一种通过创建set
作为查找的方法。
例如:
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'}]