2012-11-22 52 views
2

如何動態地將元組轉換爲鍵值對?Python中元組的關鍵值對

比方說,我有:

tuple = ('name1','value1','name2','value2','name3','value3') 

我希望把它變成一本字典:

dictionary = { name1 : value1, name2 : value2, name3 : value3) 
+0

你想發生,如果有奇數個在你的元組的項目是什麼?另外,你不想使用'tuple'作爲變量名... –

回答

13

轉換的元組鍵值對,讓dict構造構建一個字典:

it = iter(tuple_) 
dictionary = dict(zip(it, it)) 

zip(it, it)習語產生來自otherwi的項目對se flat iterable,提供可以傳遞給dict構造函數的一系列對。這個概括可以在itertools文檔中作爲grouper recipe獲得。

如果輸入足夠大,請將zip替換爲itertools.izip以避免分配臨時列表。與基於映射t[i][i + 1]的表達式不同,上述操作不僅適用於序列,還適用於任何迭代。

+0

+1。愛這個解決方案。出於某種原因,我總是認爲'zip()'不會按交替順序使用它的參數。 –

+2

@JoelCornett'zip'並不在乎,它只是消耗從左到右的迭代。 (從左到右的消費實際上[在文檔中保證](http://docs.python.org/2/library/functions.html#zip)正是爲了使這個習慣用法工作。) – user4815162342

+0

順便說一句,分組習語可以是,並且經常被表示爲單行:'dict(zip(* [iter(tuple)] * 2))''。單線形式很難理解,所以我沒有在這裏使用它。 – user4815162342

2

只是做一個簡單的循環。

my_dic = {} 
tuple = ('name1','value1','name2','value2','name3','value3') 
if len(tuple) % 2 == 1: 
    my_dic[tuple[-1]] = None 
for i in range(0, len(tuple) - 1, 2): 
    my_dic[tuple[i]] = tuple[i + 1] 
print my_dic 
2
tuple = ('name1','value1','name2','value2','name3','value3') 
d = {} 
for i in range(0, len(tuple), 2): 
    d[tuple[i]] = tuple[i+1] 
print d 
2
dictionary = {tuple[i]: tuple[i + 1] for i in range(0, len(tuple), 2)} 

另一種簡單的方法:

dictionary = dict(zip(tuple[::2],tuple[1::2])) 
+0

+1簡化和使用dict解析 – user4815162342

相關問題