在使用字典理解制作字典时,为现有字典键指定值

  • 本文关键字:字典 python dictionary recursion
  • 更新时间 :
  • 英文 :


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']}

相关内容

  • 没有找到相关文章

最新更新