2012-07-03 15 views
9

Sto provando a scrivere una funzione per convertire una lista python in una matrice JSON di {"mpn": "list_value"} oggetti, dove "mpn" è il valore letterale della stringa che mi serve per ogni oggetto ma "list_value" è il valore dall'elenco python. Userò l'output di questa funzione per una richiesta get dell'API.Python: Convertire un elenco di dizionari Python in una matrice di oggetti 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) 

Questa funzione attuale non funziona e restituisce l'ultimo valore nella lista di pitone per tutti gli oggetti JSON:

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

Tuttavia, ovviamente ho bisogno della mia funzione per restituire i valori dell'elenco unici negli oggetti come tale:

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

La linea di fondo è che non capisco perché questa funzione non funziona. Mi aspettavo di poter aggiungere un dizionario con una sola coppia chiave {valore: valore} a una lista python e non avrebbe importanza che tutti i dizionari avessero la stessa chiave perché sarebbero indipendenti. Grazie per l'aiuto.

+2

mossa 'd = {}' due linee verso il basso, all'interno del 'for' – user124114

risposta

26

Si sta aggiungendo lo stesso dizionario esatto all'elenco. È necessario creare un nuovo dizionario per ogni elemento della lista:

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

Grazie per la grande soluzione. – bmjjr

+0

Funziona perfettamente. – MrROY

+0

Fantastico! Grazie! – Dan

8

Come spiegato da altri (nelle risposte) si dovrebbe creare un nuovo dizionario per ogni elemento della lista altrove si fa riferimento sempre lo stesso dizionario

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) 

stampa

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

Doh, la ringrazio molto per la soluzione che corrisponde al mio codice originale (inelegante). La soluzione a una linea è ovviamente un codice migliore, ma apprezzo che tu abbia rivelato il mio errore. – bmjjr

Problemi correlati