2014-09-25 102 views
-3

我需要將兩個列表轉換成字典。我已經兩個列表命名爲A和B中,結合兩個列表製作字典

A = [[1,2,3] [2,3,4] [1,4,5] [1,3,4]]

的在A(列表的列表)的值將是唯一的

B = [[10,13,23] [22,21,12] [5,34,23] [1,10,9,8]]

兩個列表的長度將是相同

我需要像

C = [[ '1' 的結果:10, '2':13, '3':23] [ '2':22 ,'3' :21,'4':12] ['1':5,'4':34,'5':23] ['1':10,'3':9,'4':8]]

我試過字典的方法,但它給我一個錯誤,說列表是不可排列的類型。請讓我知道如何做到這一點。我新來python。

+0

你的輸入是無效的名單,因爲有子列表之間沒有逗號。你的輸出不是一個有效的東西,因爲字符串放在大括號中,列表中沒有冒號。另外,不要模糊地描述你的代碼和錯誤信息,複製和粘貼實際的代碼和錯誤。 – abarnert 2014-09-25 23:52:58

+0

@abarnert我的輸入在子列表之間有逗號,而在這裏輸入時我錯過了它。輸出必須是子列表的字典。 – user3559583 2014-09-25 23:58:49

+0

請勿在此處輸入,從顯示您的問題的實際運行代碼複製並粘貼。再次,不要_描述你的輸出,顯示你想要的實際輸出。 「子列表字典」沒有意義,它也不符合你的問題。我們可以試着去猜測你有什麼和你想要什麼,但是大多數人大多數時間都會猜錯,因爲我們太聰明瞭。 – abarnert 2014-09-26 00:01:21

回答

1

這是很難確定的,但我猜你的問題是這樣的:

如果ab是數字只是平面列表,所有你需要做的是這樣的:

dict(zip(a, b)) 

我假設這和你寫的相似。但這在這裏不起作用。這些不是數字清單,而是列表清單。而且你不回覆字典,你需要一個字典清單。

所以,你問Python創建一個字典,它的鍵是a子列表,並且其值是b子列表。這是一個錯誤,因爲列表不能是鍵,但即使這不是問題,它也不會有用。

要真正做到這一點,你不僅需要zipab,還拉上自己的子列表,並通過這些子呼嘯而過,不是主要的拉鍊,以dict。像這樣:

[dict(zip(suba, subb)) for (suba, subb) in zip(a, b)] 
+0

我明白了,它工作!謝謝你@abarnert :) :) – user3559583 2014-09-26 00:03:15

+0

我只是有一個更多的疑問,這是有效的方式來做到這一點? – user3559583 2014-09-26 00:04:09

+0

@ user3559583:高效的是什麼意思?如果你的意思是速度,那麼在任何真正的程序中都不太可能重要,所以這是你應該擔心的最後一件事。擔心能夠理解代碼,擴展代碼等,或者減少必須重複自己的地方的數量或者可以引入細微錯誤的地方;除了效率,任何事 – abarnert 2014-09-26 00:11:00

0

我想你想讓C成爲一個字典列表。這是一個簡單的方法來做到這一點。

def combine(keys, values): 
    "generate a dictionary from keys and values" 
    out = {} 
    for k,v in zip(keys,values): 
     out[k] = v 
    return out 

def combine_each(keys, values): 
    "for each pair of keys and values, make a dictionary" 
    return [combine(klist, vlist) for (klist,vlist) in zip(keys,values)] 

C = combine_each(A,B) 
0

備選:

>>> A = [[1,2,3], [2,3,4], [1,4,5], [1,3,4]] 
>>> B = [[10,13,23], [22,21,12], [5,34,23], [10,9,8]] 
>>> [{k:v for k, v in zip(sa, sb)} for (sa, sb) in zip(A, B)] 
[{1: 10, 2: 13, 3: 23}, {2: 22, 3: 21, 4: 12}, {1: 5, 4: 34, 5: 23}, {1: 10, 3: 9, 4: 8}]