Extract all keys from a list of dictionaries

前端 未结 6 769
遇见更好的自我
遇见更好的自我 2020-12-08 03:58

I\'m trying to get a list of all keys in a list of dictionaries in order to fill out the fieldnames argument for csv.DictWriter.

previously, I had something like thi

6条回答
  •  [愿得一人]
    2020-12-08 04:51

    Your data:

    >>> LoD
    [{'age': 10, 'name': 'Tom'}, 
     {'age': 5, 'name': 'Mark', 'height': 4}, 
     {'age': 7, 'name': 'Pam', 'weight': 90}]
    

    This set comprehension will do it:

    >>> {k for d in LoD for k in d.keys()}
    {'age', 'name', 'weight', 'height'}
    

    It works this way. First, create a list of lists of the dict keys:

    >>> [list(d.keys()) for d in LoD]
    [['age', 'name'], ['age', 'name', 'height'], ['age', 'name', 'weight']]
    

    Then create a flattened version of this list of lists:

    >>> [i for s in [d.keys() for d in LoD] for i in s]
    ['age', 'name', 'age', 'name', 'height', 'age', 'name', 'weight']
    

    And create a set to eliminate duplicates:

    >>> set([i for s in [d.keys() for d in LoD] for i in s])
    {'age', 'name', 'weight', 'height'}
    

    Which can be simplified to:

    {k for d in LoD for k in d.keys()}
    

提交回复
热议问题