【问题标题】:Python 2.7 : Finding common elements based on one key value from 2 list of dictionariesPython 2.7:根据 2 个字典列表中的一个键值查找常用元素
【发布时间】:2019-05-21 08:58:29
【问题描述】:

我的信号列表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},
]

我想要包含 signal_name 的最终列表,这些列表位于 list1 和 list2 中。这里 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中使用最少的代码来完成?

【问题讨论】:

    标签: python list dictionary key element


    【解决方案1】:

    您可以使用 list 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}]
    

    【讨论】:

      【解决方案2】:

      这是通过创建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'}]
      

      【讨论】:

        猜你喜欢
        • 2017-11-06
        • 2020-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-15
        • 2020-06-11
        • 1970-01-01
        相关资源
        最近更新 更多