使用键/值和键/值反转创建dict

时间:2016-07-27 11:56:29

标签: python generator list-comprehension

有这样的清单

example = ['ab', 'cd']

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

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

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

问题:如何在一条线上做同样的事情?

5 个答案:

答案 0 :(得分:2)

另一种可能的解决方案:

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

答案 1 :(得分:0)

列表理解与字典更新

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以使用;分隔逻辑行

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 :(得分:0)

react-tinymce 0.2.3