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
) - 价值→包含国家(类型:
str
)的字符串列表(类型:list
)在该大陆定义为"大",或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']}
但每当同一个大陆出现时,国家名称就会被覆盖。我希望国家名称被附加,而不是被覆盖。
有人能帮我写一个可能使用递归的较短版本的工作代码吗。谢谢
您当然可以简化您所拥有的:
filtered_dict = {}
for k, (x, *_, y) in country_info.items():
if y:
filtered_dict.setdefault(x, []).append(k)
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]}
def big_countries(country_info: dict) -> dict:
filtered_dict = {}
for k,v in country_info.items():
if v[4]:
filtered_dict.setdefault(v[0], [])
filtered_dict[v[0]].append(k)
return filtered_dict
print(big_countries(country_info))
输出
{'Asia': ['Afghanistan'], 'Africa': ['Algeria', 'Angola']}