【问题标题】:Unpacking a dictionary's tuple keys into individual keys using dictionary comprehension in Python使用 Python 中的字典理解将字典的元组键解包为单个键
【发布时间】:2018-11-16 19:45:28
【问题描述】:

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

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 }

【问题讨论】:

  • (请注意,要明确定义此问题,元组键必须成对不相交。)

标签: python dictionary key


【解决方案1】:

您正在寻找的嵌套理解如下所示:

>>> 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}

【讨论】:

    【解决方案2】:

    你可以像这样使用字典推导:

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

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 2023-03-10
      相关资源
      最近更新 更多