2012-07-03 23 views
9

Bir python listesini bir "{" mpn ":" list_value "} nesnesi JSON dizisine dönüştürmek için bir işlev yazmaya çalışıyorum, burada" mpn " her nesne için gereken literal dize değeridir, ancak "list_value" python listesindeki değerdir. Bir API alma isteği için bu işlevin çıkışını kullanacağım.Python: Python sözlüklerinin bir listesini bir JSON nesnesi dizisine dönüştürme

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) 

Bu akım fonksiyonu çalışan ve tüm JSON nesneleri için piton listedeki son değerini döndürür değildir: Ancak

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

, tabii ki nesneler benzersiz liste değerlerini döndürmek için benim işlevi gerekir gibi:

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

Alt satır Bu işlevin neden çalışmadığını anlamıyorum. Tek bir {key: value} çifti ile bir python listesine bir sözlük ekleyebileceğimi ve sözlüklerin hepsinin de bağımsız olacağından dolayı aynı anahtara sahip olmasının önemli olmadığını umuyorum. Yardım ettiğin için teşekkür ederim.

+2

hareket hissettireceğimi = {} 'iki hat aşağı' büyük bir çözüm – user124114

cevap

26

Tam olarak aynı sözlüğü listeye ekliyorsunuz. Listede her öğe için yeni bir sözlük oluşturmak gerekir: Listedeki her öğe için yeni bir sözlük oluşturmak gerekir

(cevapları) Başkaları tarafından açıklandığı gibi
json.dumps([dict(mpn=pn) for pn in lst]) 
+0

sayesinde for' içinde. – bmjjr

+0

Mükemmel çalışıyor. – MrROY

+0

Harika! Teşekkür ederim! – Dan

8

başka yerde sen aynı sözlük daima referans

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) 

baskı

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

Doh, orijinal (inelegant) kodumla eşleşen çözüm için çok teşekkür ederim. Tek hat çözümü açıkçası daha iyi bir kod ama hatayı açığa vurduğunuzu takdir ediyorum. – bmjjr

İlgili konular