2015-04-19 51 views
4

我有2所列出如下創建從列表JSON:使用ZIP

>> a = [u'username', u'first name', u'last name'] 
>> b = [[u'user1', u'Jack', u'Dawson'], [u'user2', u'Roger', u'Federer']] 

我試圖得到一個輸出的JSON如下所示:

[ 
    { 
    "username":"user1", 
    "first name":"Jack", 
    "last name":"Dawson" 
    }, 
    { 
    "username":"user2", 
    "first name":"Roger", 
    "last name":"Federer" 
    } 
] 

我試圖使用zip命令如下:

>> x = [] 
>> for i in range(0, len(b)): 
.. x += zip(a,b[i]) 
.. 

但是,這並沒有得到我期望的輸出。我如何實現這個?

+0

雖然它看起來像這個問題已經回答,這確實是不正確的問題。 「這不是得到我想要的結果」意味着「我不高興」。描述實際的輸出和它的錯誤。 (在這種情況下,問題是'+ ='意味着「將源數組連接到目標數組」,而不是,因爲您似乎認爲「*將源值附加到目標數組上」。 ,不出意外,'.append()'。) – Malvolio

回答

6

zip將只返回元組列表。你忘了將這個元組列表轉換成字典。你可以使用dict構造函數。你也可以完全避免循環:[dict(zip(a, row)) for row in b]將創建你想要的字典列表。然後建立列表後,你可以轉換成json。例如:

a = [u'username', u'first name', u'last name'] 
b = [[u'user1', u'Jack', u'Dawson'], [u'user2', u'Roger', u'Federer']] 
import json 
print(json.dumps([dict(zip(a, row)) for row in b], indent=1)) 

輸出:

[ 
{ 
    "username": "user1", 
    "first name": "Jack", 
    "last name": "Dawson" 
}, 
{ 
    "username": "user2", 
    "first name": "Roger", 
    "last name": "Federer" 
} 
] 
+0

這是很好的python代碼,但是你應該指出,OP提出了兩個錯誤,你正在糾正這兩個錯誤。其中一個實質性的錯誤是,他將+ =(連接)與append混淆。另一個是文體錯誤,是使用顯式循環而不是理解。 – Malvolio

+0

謝謝,@Malvolio。希望現在好一點。 – JuniorCompressor