【问题标题】:Convenient way to create a map for list of tuples为元组列表创建映射的便捷方法
【发布时间】:2016-10-31 12:08:50
【问题描述】:

对于具有唯一值的元组列表,例如:

a = [(1, 2), (3, 4), (5, 6)]

我想创建一个地图:

b = {}
for t in a:
    for tt in t:
        b[tt] = t

>>> {1: (1, 2), 2: (1, 2), 3: (3, 4), 4: (3, 4), 5: (5, 6), 6: (5, 6)}

在没有显式 for 循环的情况下,是否有更好/更方便的方法来实现这一点?一种方法可能是使用dict.update,尽管这可能会因为元组中的许多项目而变得丑陋:

[(b.update({t1: (t1, t2)}), b.update({t2: (t1, t2)})) for t1, t2 in a]

【问题讨论】:

标签: python dictionary


【解决方案1】:

使用字典理解

>>> a = [(1, 2), (3, 4), (5, 6)]
>>> {i: tup for tup in a for i in tup}
{1: (1, 2), 2: (1, 2), 3: (3, 4), 4: (3, 4), 5: (5, 6), 6: (5, 6)}

【讨论】:

    【解决方案2】:
    from itertools import chain
    flatten = chain.from_iterable
    
    a = [(1, 2), (3, 4), (5, 6)]
    d = dict(flatten(((k, (k, v)), (v, (k, v))) for k, v in a))
    
    print(d)
    

    【讨论】:

      【解决方案3】:

      字典理解:

      {**{k: (k, v) for k, v in a}, **{v: (k, v) for k, v in a}}
      

      【讨论】:

      • 我假设为 3。我在 3.4 中也遇到了语法错误,但我记得在较新的 Python 中是允许的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 2021-08-09
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多