我无法理解Python 3中的嵌套字典理解。我从下面的示例中得到的结果输出正确的结构而没有错误,但只包含一个内部键:值对。我没有找到这样的嵌套字典理解的例子;谷歌搜索“嵌套字典理解python”显示遗留示例,非嵌套理解,或使用不同方法解决的答案。我可能使用了错误的语法。
示例:
data = {outer_k: {inner_k: myfunc(inner_v)} for outer_k, outer_v in outer_dict.items() for inner_k, inner_v in outer_v.items()}
此示例应返回原始字典,但内部值由myfunc
修改。
outer_dict字典的结构,以及结果:
{outer_k: {inner_k: inner_v, ...}, ...}
答案 0 :(得分:28)
{inner_k: myfunc(inner_v)}
不是字典理解。这只是一本字典。
你可能正在寻找类似的东西:
data = {outer_k: {inner_k: myfunc(inner_v) for inner_k, inner_v in outer_v.items()} for outer_k, outer_v in outer_dict.items()}
为了便于阅读,不要过多地嵌套词典理解和列表推理。
答案 1 :(得分:27)
添加一些换行符和缩进:
data = {
outer_k: {inner_k: myfunc(inner_v)}
for outer_k, outer_v in outer_dict.items()
for inner_k, inner_v in outer_v.items()
}
...很明显你实际上只有一个“二维”字典理解。你真正想要的可能是:
data = {
outer_k: {
inner_k: myfunc(inner_v)
for inner_k, inner_v in outer_v.items()
}
for outer_k, outer_v in outer_dict.items()
}
(这正是Blender在他的回答中建议的,添加了空格)。
答案 2 :(得分:1)
{ok: {ik: myfunc(iv) for ik, iv in ov.items()} for ok, ov in od.items()}
其中
确认键
ik-内键
ov-外值
内在价值
外径字典
这就是我的记忆。