首页 > 解决方案 > (更多)嵌套字典理解:如何将内部值切换为键?

问题描述

与上一个问题非常相似,但并不完全相同。在该示例中,问题本质上是如何对“内部”字典的值执行某些功能-但外部和内部字典的键保持不变。我希望内部 dict 的值成为新 dict 的键,并且具有基于旧键的新值。

我有一个像这样的“嵌套”字典:

data = {
    "A":{"X":1, "Y":2, "Z":3},
    "B":{"X":4, "Y":5, "Z":6},
    "C":{"X":7, "Y":8, "Z":9},
}

我想创建一个新字典,其中内部字典的值(即数字)作为新键,新值基于连接外部和内部字典的键:

new_data = {
    1:"AX",
    2:"AY",
    3:"AZ",
    4:"BX",
    5:"BY",
    6:"BZ",
    7:"CX",
    8:"CY",
    9:"CZ",
}

根据链接的帖子,我尝试了

data = {inner_v: outer_k + inner_k for inner_k, inner_v in outer_v.items() for outer_k, outer_v in outer_dict.items()}

但是我收到一个错误,说 external_v 没有定义

标签: pythonpython-3.x

解决方案


在理解中编写嵌套for循环时,嵌套是从左到右发生的(反之亦然)。

因此,您只需将理解中的循环顺序交换outer_dict为实际的理解data

data = {
    "A":{"X":1, "Y":2, "Z":3},
    "B":{"X":4, "Y":5, "Z":6},
    "C":{"X":7, "Y":8, "Z":9},
}

outer_dict = data
new_data = {inner_v: outer_k + inner_k for outer_k, outer_v in outer_dict.items() for inner_k, inner_v in outer_v.items()}
print(new_data)
# {1: 'AX', 2: 'AY', 3: 'AZ', 4: 'BX', 5: 'BY', 6: 'BZ', 7: 'CX', 8: 'CY', 9: 'CZ'}

推荐阅读