首页 > 解决方案 > 在使用字典理解创建字典时将值分配给现有字典键

问题描述

Python:编写一个名为 big_countries 的函数:

输入

country_info = {'Afghanistan': ['Asia', 652230, 25500100, 20343000, True],
'Albania': ['Europe', 28748, 2831741, 12960000, False],
'Algeria': ['Africa', 2381741, 37100000, 188681000, True],
'Andorra': ['Europe', 468, 78115, 3712000, False],
'Angola': ['Africa', 1246700, 20609294, 100990000, True]}

我编写了以下代码,在完成上述任务时效果很好。

filtered_dict = dict()
for (k,v) in country_info.items():
    if v[4]: filtered_dict[v[0]] = filtered_dict.get(v[0], []) + [k]
print(filtered_dict)

预期输出:

{'Asia': ['Afghanistan'], 'Africa': ['Algeria', 'Angola']}

但我有一种痒的感觉,这可以缩短为:

filtered_dict = {v[0] : filtered_dict.get(v[0], []) + [k] for (k,v) in country_info.items() if v[4]}

问题是 1)我很笨,2)在filtered_dict.get()字典制作之前无法访问字典,或者换句话说,我们还没有定义filtered_dict

我可以做类似的事情:

temp_dict = dict()
filtered_dict = {v[0] : temp_dict.get(v[0], []) + [k] for (k,v) in country_info.items() if v[4]}

#Output 
{'Asia': ['Afghanistan'], 'Africa': ['Angola']}

但是每次出现同一大陆时,国家名称都会被覆盖。我希望附加的国家名称不会被覆盖。

任何人都可以帮助我编写可能使用递归的工作代码的较短版本。谢谢!

标签: pythondictionaryrecursion

解决方案


你当然可以简化你所拥有的:

filtered_dict = {}
for k, (x, *_, y) in country_info.items():
    if y: 
        filtered_dict.setdefault(x, []).append(k)

推荐阅读