使用 glom 展平嵌套字典

Flatten nested dictionary using glom

我有一个嵌套的默认字典,如下所示:

source["China"]["Beijing"] = {
    "num_persons" : 1454324,
    "num_cars" : 134
}
source["Greece"]["Athens"] = {
    "num_persons" : 2332,
    "num_cars" : 12
}

如何使用 glom 将上面的嵌套字典转换为如下所示的记录列表:

result = [
     {
           'country' : 'China',
           'city' : 'Beijing',
           'num_persons' : 1454324,
           'num_cars' : 134
     },
     {
           'country' : 'Greece',
           'city' : 'Athens',
           'num_persons' : 2332,
           'num_cars' : 12
     }
]

我看过https://glom.readthedocs.io/en/latest/tutorial.html#data-driven-assignment,但我还是一头雾水。

我不认为你需要一个包。只需列表理解就足够了。

from collections import defaultdict

source = defaultdict(lambda: defaultdict(dict))
source["China"]["Beijing"] = {"num_persons": 1454324, "num_cars": 134}
source["Greece"]["Athens"] = {"num_persons": 2332, "num_cars": 12}

result = [{'country': country, 'city': city, **info} for country, cities in source.items() for city, info in cities.items()]

(您需要 python 3.5+ 才能进行通用解包 **info。)

输出:

[{'country': 'China',  'city': 'Beijing', 'num_persons': 1454324, 'num_cars': 134},
 {'country': 'Greece', 'city': 'Athens',  'num_persons': 2332,    'num_cars': 12}]