python - 在使用字典理解创建字典时将值分配给现有字典键
问题描述
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
:) - 值 → 字符串列表(类型:),其中包含在该大陆定义为“大”
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']}
但是每次出现同一大陆时,国家名称都会被覆盖。我希望附加的国家名称不会被覆盖。
任何人都可以帮助我编写可能使用递归的工作代码的较短版本。谢谢!
解决方案
你当然可以简化你所拥有的:
filtered_dict = {}
for k, (x, *_, y) in country_info.items():
if y:
filtered_dict.setdefault(x, []).append(k)
推荐阅读
- node.js - MongoDB,如何将事务设置为 CRUD?
- android - 使应用程序 UI 响应的最佳方法?[颤动]
- android - 无权访问 AccountChooserOptions.Builder()
- multithreading - Matlab 并行计算工具箱:“线程 x 工作者”的真正含义
- javascript - 从 JS Map 中获取第一个值
- json - 在 typescript 中为 JSON 文件添加类型定义
- r - 如何在 r 中使用带有 dplyr 的变异函数中的向量
- algorithm - F在排序数组中找到单个元素,其中每个元素出现两次,除了一个 | 数据结构和算法
- django - 一个模型在 Django 中有 2 个类别。如何在 html 中显示来自同一模型的另一个类别?
- django - Django 处理请求的性能缓慢