嵌套字典理解python

时间:2013-07-29 02:14:44

标签: python syntax nested list-comprehension dictionary-comprehension

我无法理解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, ...}, ...}

3 个答案:

答案 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-外值
内在价值 外径字典 这就是我的记忆。