2013-05-17 94 views
61

我想創建一個給定列表中的字典只需一行。字典的鍵將是索引,值將是列表的元素。事情是這樣的:一個班輪:從索引列表創建詞典作爲鍵

a = [51,27,13,56]   #given list 

d = one-line-statement #one line statement to create dictionary 

print(d) 

輸出:

{0:51, 1:27, 2:13, 3:56} 

我沒有任何具體的要求,爲什麼我要一個線。我只是在探索python,並想知道這是否可能。

+1

你認爲通過擁有這本詞典你會獲得什麼優勢?使用字典時索引查找速度不會更快。 –

+0

@MartijnPieters:嗯,我可能需要,例如:{[x [0]:51,x [1]:27,x [2]:13,x [3]:56}'。 – Nawaz

+2

然後使用'zip()':'dict(zip(x,a))'。 –

回答

113
a = [51,27,13,56] 
b = dict(enumerate(a)) 
print(b) 

會產生

{0: 51, 1: 27, 2: 13, 3: 56} 

enumerate(sequence, start=0)

返回一個枚舉對象。 序列必須是序列,迭代器或支持迭代的某個其他對象。通過enumerate()返回的迭代器的next()方法返回包含一個tuple的計數(從開始缺省值爲0)從迭代序列獲得和的值:

+0

+1我忘了最簡單的事 – jamylak

+2

@jamylak但是沒有必要刪除你的。人們可能已經瞭解了'count()'... – glglgl

+0

+1。很好的答案。 – Nawaz

14

嘗試enumerate:它將返回一個列表元組(i, a[i])的(或迭代器),從中你可以建立一個dict

a = [51,27,13,56] 
b = dict(enumerate(a)) 
print b 
18

與其他構造函數,你有

a = [51,27,13,56]   #given list 
d={i:x for i,x in enumerate(a)} 
print(d) 
+1

注意這句法不會在Python 2 –

+6

@StefanoSanfilippo快譯通,並設定了內涵反向移植到Python 2.7。 – kevingessner

+0

我糾正了。不過,請記住,這不適用於以前的Python 2版本。 –

4
{x:a[x] for x in range(len(a))} 
1

只需使用列表理解。

a = [51,27,13,56] 
b = dict([ ((i,a[i]) for i in range(len(a)) ]) 
print b 
相關問題