【问题标题】:Quick way of getting the keys in a list of dictionaries [duplicate]在字典列表中获取键的快速方法[重复]
【发布时间】:2019-10-04 14:27:38
【问题描述】:

考虑下面的例子:
m = [{'a':1},{'b':2}]
我想找到一种在m 中形成键列表的简短方法,就像['a','b'] 一样。与使用传统的 for 循环相比,最短或最简单的方法是什么?也许是语法糖?

【问题讨论】:

    标签: python list dictionary syntactic-sugar


    【解决方案1】:

    您可以使用列表推导,这是 for 循环的语法糖:

    keys_list = [x for d in m for x in d.keys()]
    

    请注意,如果您的字典有共同的键,它们将在结果中出现多次。

    如果你只想要唯一的键,你可以这样做:

    keys_list = list(set(x for d in m for x in d.keys()))
    

    【讨论】:

    • 但这并没有给出一个字符串,对吧?这给出了类似[dict_keys(['a']), dict_keys(['b'])],而不是['a','b']
    • 是的,现在我改变答案,对不起。
    • 你甚至可以写得更简单:[x for x in d for d in m],因为遍历字典会返回键。
    • 谢谢,不知道。如果您不介意,我会根据您的建议编辑帖子。
    • 我的回答中已经有这种方法@dome 我想你可能想避免重复?
    【解决方案2】:

    带有列表理解的简单双 for 循环应该可以解决问题。遍历列表,对于列表中的每个元素,遍历键

    In [5]: m = [{'a':1},{'b':2}]                                                                                                                                                                                                
    
    In [6]: [k for item in m for k in item]                                                                                                                                                                                      
    Out[6]: ['a', 'b']
    

    如果列表有重复键,只需将最终输出转换为集合,然后再转换为列表以获得唯一键

    In [19]: m = [{'a':1, 'b':2},{'a':3,'b':4}]                                                                                                                                                                                  
    
    In [20]: r = [k for item in m for k in item]                                                                                                                                                                                 
    
    In [21]: r                                                                                                                                                                                                                   
    Out[21]: ['a', 'b', 'a', 'b']
    
    In [22]: r = list(set(r))                                                                                                                                                                                                    
    
    In [23]: r                                                                                                                                                                                                                   
    Out[23]: ['b', 'a']
    

    【讨论】:

      【解决方案3】:
      1. 将所有 dicts 键提取到列表列表中
      2. 通过itertools.chain将它们转换为一个列表
      from itertools import chain
      
      a = [{'a': 1, 'c': 2}, {'b': 2}]
      b = [d.keys() for d in a]
      list(chain(*b))
      

      将返回:

      ['c', 'a', 'b']

      【讨论】:

        【解决方案4】:

        如果您只想要唯一键,请执行以下操作:

        m = [{'a':1},{'b':2},{'b':3}]
        print({x for d in m for x in d})
        

        这个包含重复:

        print([x for d in m for x in d])
        

        【讨论】:

        • 你测试你的代码了吗? @alireza yazdandoost
        • @ncica 我编辑了 :) 现在没关系
        猜你喜欢
        • 1970-01-01
        • 2011-08-17
        • 2019-05-03
        • 2020-03-12
        • 1970-01-01
        • 2017-11-29
        • 1970-01-01
        • 2022-10-07
        • 2019-01-16
        相关资源
        最近更新 更多