2016-07-27 59 views
3

有這樣的列表創建鍵/值和鍵/值字典逆轉

example = ['ab', 'cd']

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

通過定期循環我能做到這一點,如:

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

問題:我如何在同一行上做同樣的事情?

+6

'字典(例如+ S [:: - 1]榜樣中])' – vaultah

+0

@vaultah,請把它寫成的答案,我會接受它 – micgeronimo

回答

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

與詞典更新

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

'例如在X:result.update ({x [0]:x [1],x [1]:x [0]})'更清潔。 – vaultah

+0

您仍然需要'result = {}'的邏輯行 – janbrohl

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

也工作。

0
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