2015-12-23 132 views
2

我有一個看起來像這樣的列表(myarray的),清單字典,鍵和值

[u 'item-01', 52, u 'item-02', 22, u 'item-03', 99, u 'item-04', 84] 

我試圖將其轉換成與鍵和值的字典。

我試過循環,但不給我預期的結果,

mydict = {} 
for k,v in myarray: 
mydict[k] = v 
+0

「鍵叫名」和「價值被叫號碼」的聲音腥。字典沒有任何關於它的鍵和值被調用的表示。 – user2357112

+0

可能的重複[你如何將一個列表分割成Python中均勻大小的塊?](http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-塊狀物的蟒) – GingerPlusPlus

回答

6

簡單:使用zip和擴展切片。

mydict = dict(zip(myarray[::2], myarray[1::2])) 

第一擴展切片使所有偶數索引的list,所有奇數的二,zip雙他們分成tuple s,並且dict構造可以採取配對值的迭代和使用它們作爲初始化鍵/值對。

注意:Padraig的解決方案使用iter將工作得更快(並處理非序列迭代),雖然它有點不直觀(並且不如書面簡潔)。在成爲甚至不太直觀通過using the behavior of list multiplication copying references爲代價的過程中,它可以是一個襯裏(見注2上順序操作的表;的另一種用途的例子爲它在itertoolsgrouper recipe找到):

mydict = dict(zip(*[iter(myarray)]*2)) 
4

您可以結合iterzip

l = [u'item-01', 52, u'item-02', 22, u'item-03', 99, u'item-04', 84] 

it = iter(l) 

print(dict(zip(it, it))) 
{u'item-04': 84, u'item-01': 52, u'item-03': 99, u'item-02': 22} 

zip(it, it)創建對每兩個元素相結合,號召結果字典使用每個元組爲重點,第二個作爲高原的第一要素。

In [16]: it = iter(l) 

In [17]: l = list(zip(it,it)) 

In [18]: l 
Out[18]: [('item-01', 52), ('item-02', 22), ('item-03', 99), ('item-04', 84)] 

In [19]: dict(l) 
Out[19]: {'item-01': 52, 'item-02': 22, 'item-03': 99, 'item-04': 84} 

使用for循環像自己的代碼:

it = iter(l) 
d = {} 
for k, v in it: 
    d[k] = v