【问题标题】:Create dict with key/value and key/value reversed创建键/值和键/值反转的字典
【发布时间】:2016-12-01 10:09:24
【问题描述】:

有这样的清单

example = ['ab', 'cd']

我需要得到{'a': 'b', 'b': 'a', 'c': 'd', 'd': 'c'}

使用常规循环,我可以这样做:

result = {}
for i,j in example:
    result[i] = j
    result[j] = i

问题:我怎样才能在一行上做同样的事情?

【问题讨论】:

  • dict(example + [s[::-1] for s in example])
  • @vaultah,请写成答案,我会接受的

标签: python generator list-comprehension


【解决方案1】:

另一种可能的解决方案:

dict(example + [s[::-1] for s in example])

[s[::-1] for s in example] 创建一个所有字符串颠倒的新列表。 example + [s[::-1] for s in example] 将列表组合在一起。然后dict 构造函数从键值对列表(每个字符串的第一个字符和最后一个字符)构建一个字典:

In [5]: dict(example + [s[::-1] for s in example])
Out[5]: {'a': 'b', 'b': 'a', 'c': 'd', 'd': 'c'}

【讨论】:

    【解决方案2】:

    带有字典更新的列表理解

    [result.update({x[0]:x[1],x[1]:x[0]}) for x in example]
    

    【讨论】:

    • for x in example:result.update({x[0]:x[1],x[1]:x[0]}) 更干净。
    • 你仍然需要result={}的逻辑行
    【解决方案3】:

    您可以使用; 分隔逻辑行

    result=dict(example); result.update((k,v) for v,k in example)
    

    当然

    result=dict(example+map(reversed,example)) # only in python 2.x
    

    result=dict([(k,v) for k,v in example]+[(k,v) for v,k in example])
    

    也可以工作。

    【讨论】:

      【解决方案4】:
      example = ['ab', 'cd']
      
      res1={x[1]:x[0] for x in example}
      res2={x[0]:x[1] for x in example}
      res=res1.update(res2)
      print res1
      

      【讨论】:

        【解决方案5】:

        dict comprehension 应该这样做:

        In [726]: {k: v for (k, v) in map(tuple, example + map(reversed, example))}  # Python 2
        Out[726]: {'a': 'b', 'b': 'a', 'c': 'd', 'd': 'c'}
        
        In [727]: {s[0]: s[1] for s in (example + [x[::-1] for x in example])}  # Python 3
        Out[727]: {'b': 'a', 'a': 'b', 'd': 'c', 'c': 'd'}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-26
          • 1970-01-01
          • 2023-01-21
          • 2022-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多