使用 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}]
我有一个嵌套的默认字典,如下所示:
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}]