使用Python中的字典理解功能将字典的元组键解压缩为单个键

时间:2018-11-16 19:45:28

标签: python dictionary key

假设一个字典中键是元组:

D = {
    ('a','b') : 1,
    ('x','y','z') : 2
}

如何将每个元组键拆分为具有相同值的单独键:

N = {
    'a' : 1, 'b' : 1,
    'x' : 2, 'y' : 2, 'z' : 2
}

在单个词典理解中。我起草了以下代码,但我想知道是否可以缩短它,而不创建与键元组长度相同的代理值列表。

N = { k:v for s in ( zip(keys,[value]*len(keys)) for keys,value in D.items() ) for k,v in s }

2 个答案:

答案 0 :(得分:2)

您要查找的嵌套理解如下:

>>> D = {
...:    ('a','b') : 1,
...:    ('x','y','z') : 2
...:}
>>> 
>>> {k_i:v for k, v in D.items() for k_i in k}
>>> {'a': 1, 'b': 1, 'x': 2, 'y': 2, 'z': 2}

可以用传统的for循环编写,如下所示:

>>> result = {}
>>> for k, v in D.items():
...:    for k_i in k:
...:        result[k_i] = v
...:        
>>> result
>>> {'a': 1, 'b': 1, 'x': 2, 'y': 2, 'z': 2}

奖金:itertools滥用!

>>> from itertools import repeat, chain
>>> dict(chain.from_iterable(zip(k, repeat(v)) for k, v in D.items()))
>>> {'a': 1, 'b': 1, 'x': 2, 'y': 2, 'z': 2}

答案 1 :(得分:1)

您可以像这样使用dict理解:

{k: v for t, v in D.items() for k in t}