python - 使用 dict-comprehension 复制嵌套的 for 循环
问题描述
给定以下代码:
列表列表的最小示例:
c = [['dog', 'Sg', 'Good'], ['cat', 'Pl', 'Okay'], ['dog', 'Pl', 'Bad'],
['dog', 'Sg', 'Good'], ['cat', 'Pl', 'Okay'], ['dog', 'Pl', 'Okay'],
['dog', 'Sg', 'Good'], ['cat', 'Sg', 'Good'], ['dog', 'Pl', 'Bad'],
['dog', 'Sg', 'Good'], ['cat', 'Pl', 'Okay'], ['dog', 'Pl', 'Bad']]
创建sets
单词c
outer_keys = set()
inner_keys = set()
for x in c:
outer_keys.add(x[0])
inner_keys |= set(x[1:])
创建dict
与for loop
Lemma = dict()
for i in outer_keys:
j_d = dict()
for j in inner_keys:
j_d[j] = 0
j_d[i] = 0 # this is the line I can't replicate with a comprehension
Lemma[i] = j_d
for loop
结果:
{'dog': {'Okay': 0, 'Pl': 0, 'Good': 0, 'Bad': 0, 'Sg': 0, 'dog': 0},
'cat': {'Okay': 0, 'Pl': 0, 'Good': 0, 'Bad': 0, 'Sg': 0, 'cat': 0}}
使用dict comprehension
:
- 这是我需要帮助的地方。我无法
for-loop
用dict
理解来复制
Lemma = {j: {i: 0 for i in inner_keys} for j in outer_keys}
注意:dog
应该是 inside value
of outerdog
和 forcat
我的dict comprehension
结果:
{'dog': {'Okay': 0, 'Pl': 0, 'Good': 0, 'Bad': 0, 'Sg': 0},
'cat': {'Okay': 0, 'Pl': 0, 'Good': 0, 'Bad': 0, 'Sg': 0}}
问题:
- 如何复制
for-loop
with 的结果dict comprehension
? - 顺序无所谓。
解决方案
您可以dict.fromkeys
与 一起使用inner_keys | {j}
:
>>> {j: dict.fromkeys(inner_keys | {j}, 0) for j in outer_keys}
{'cat': {'Bad': 0, 'Good': 0, 'Okay': 0, 'Pl': 0, 'Sg': 0, 'cat': 0},
'dog': {'Bad': 0, 'Good': 0, 'Okay': 0, 'Pl': 0, 'Sg': 0, 'dog': 0}}
推荐阅读
- android - Android Studio 内置布局的所有 android.R.layout 的屏幕截图
- r - 使用动物园包我得到一个奇怪的频率
- python - AttributeError:“NodeView”对象没有属性“索引”
- c# - C# - 实例化一个返回 JSON 对象的类
- c# - 开发人员如何保持参考大量不同的实体预制件?
- reactjs - 在调整大小时重新排列反应组件
- flask - flask login_required 下一个参数不起作用
- php - Symfony 4 在新的开发项目中,简单的身份验证失败并出现错误“由于系统问题无法处理身份验证请求”
- mysql - 在 HAVING 子句中使用 MAX/MIN 优化查询
- sql - 如何通过相关表上的列的总和对 SELECT 查询进行排序?