2012-07-03 175 views
9

我正在嘗試編寫一個函數來將Python列表轉換爲{「mpn」:「list_value」}對象的JSON數組,其中「mpn」是每個對象所需的文字字符串值,但「list_value」是來自python列表的值。我將使用此函數的輸出來獲取API獲取請求。Python:將Python字典列表轉換爲JSON對象數組

part_nums = ['ECA-1EHG102','CL05B103KB5NNNC','CC0402KRX5R8BB104'] 

def json_list(list): 
    lst = [] 
    d = {} 
    for pn in list: 
     d['mpn']=pn 
     lst.append(d) 
    return json.dumps(lst, separators=(',',':')) 

print json_list(part_nums) 

這個電流功能無法正常工作,並在所有的JSON對象的Python列表返回最後一個值:

>[{"mpn":"CC0402KRX5R8BB104"},{"mpn":"CC0402KRX5R8BB104"},{"mpn":"CC0402KRX5R8BB104"}] 

但是,當然,我需要我的函數中的對象返回唯一的列表值因此:

>[{"mpn":"ECA-1EHG102"},{"mpn":"CL05B103KB5NNNC"},{"mpn":"CC0402KRX5R8BB104"}] 

底線是我不明白爲什麼這個功能不起作用。我希望我可以用一個{key:value}對將一個字典追加到一個python列表中,並且所有字典都具有相同的關鍵字並不重要,因爲它們是獨立的。謝謝你的幫助。

+2

移動'd = {}'兩條線向下,裏面的'for' – user124114

回答

26

您正在向列表添加完全相同的字典。您應該創建一個新的字典列表中的每個項目:

json.dumps([dict(mpn=pn) for pn in lst]) 
+0

感謝偉大的溶液。 – bmjjr

+0

它完美地工作。 – MrROY

+0

太棒了!謝謝! – Dan

8

正如其他人解釋(在答案),你應該創建一個新的字典列表中的每個項目的其他地方,你總是引用相同的字典

import json 
part_nums = ['ECA-1EHG102','CL05B103KB5NNNC','CC0402KRX5R8BB104'] 

def json_list(list): 
    lst = [] 
    for pn in list: 
     d = {} 
     d['mpn']=pn 
     lst.append(d) 
    return json.dumps(lst) 

print json_list(part_nums) 

打印

[{"mpn": "ECA-1EHG102"}, {"mpn": "CL05B103KB5NNNC"}, {"mpn": "CC0402KRX5R8BB104"}] 
+0

Doh,非常感謝你的解決方案,匹配我的原始(不雅)代碼。單行解決方案顯然是更好的代碼,但我很感謝你揭示我的錯誤。 – bmjjr