【发布时间】:2021-10-25 13:08:42
【问题描述】:
Python:编写一个名为 big_countries 的函数:
- 将字典(类型:
dict)作为参数
输入
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]}
- 并返回另一个字典。返回的字典格式为:
- 键→大陆(类型:
str) - value → 包含国家/地区的字符串列表(类型:
list)(类型:str) 在那个大陆被定义为“大”或country_info['country_name'][4]是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']}
但每次出现同一大陆时,国家名称都会被覆盖。我希望附加的国家名称不会被覆盖。
谁能帮我写一个可能使用递归的更短版本的工作代码。 谢谢!
【问题讨论】:
-
您确定输出应该是
{'Asia': ['Afghanistan'], 'Africa': ['Algeria', 'Angola']}而不是{'Asia': ['Afghanistan'], 'Africa': ['Algeria', 'Angola'], 'Europe': []}? -
@Stef 是的,我只想过滤带有
country_info['country_name'][4] == True的值
标签: python dictionary recursion