2012-07-03 14 views
9

Estoy intentando escribir una función para convertir una lista de Python en una matriz JSON de {"mpn": "list_value"} objetos, donde "mpn" es el valor literal de cadena que necesito para cada objeto, pero "list_value" es el valor de la lista de python. Usaré el resultado de esta función para una solicitud de obtención de API.Python: Convierta una lista de diccionarios de Python en una matriz de objetos 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) 

Esta función actual no funciona y devuelve último valor de la lista de Python para todos los objetos JSON:

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

Sin embargo, por supuesto que necesita mi función para devolver los valores de las listas únicas de los objetos como tal:

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

En resumen, no entiendo por qué esta función no funciona. Esperaba poder agregar un diccionario con un único par de {key: value} a una lista de python y no importaría que todos los diccionarios tengan la misma clave porque serían independientes. Gracias por tu ayuda.

+2

movimiento 'd = {}' dos líneas hacia abajo, dentro de la 'for' – user124114

Respuesta

26

Está agregando exactamente el mismo diccionario a la lista. Debe crear un nuevo diccionario para cada elemento de la lista:

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

Gracias por la gran solución. – bmjjr

+0

Funciona perfectamente. – MrROY

+0

¡Impresionante! ¡Gracias! – Dan

8

Como se explicó por los demás (en la respuesta) se debe crear un nuevo diccionario para cada elemento de la lista en otro lugar se hace referencia siempre el mismo diccionario

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) 

impresión

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

Doh, muchas gracias por la solución que coincide con mi código original (poco elegante). La solución de una línea es obviamente un mejor código, pero le agradezco que haya revelado mi error. – bmjjr

Cuestiones relacionadas