快速获取字典列表中的键的方法

Huz*_*uzo 4 python dictionary list syntactic-sugar

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

dom*_*ome 10

您可以使用列表理解,一种for循环的语法方法:

keys_list = [x for d in m for x in d.keys()]
Run Code Online (Sandbox Code Playgroud)

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

如果只需要唯一键,则可以执行以下操作:

keys_list = list(set(x for d in m for x in d.keys()))
Run Code Online (Sandbox Code Playgroud)


Dev*_*ngh 6

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

In [5]: m = [{'a':1},{'b':2}]                                                                                                                                                                                                

In [6]: [k for item in m for k in item]                                                                                                                                                                                      
Out[6]: ['a', 'b']
Run Code Online (Sandbox Code Playgroud)

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

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']
Run Code Online (Sandbox Code Playgroud)