Tengo un diccionario que se convierte de un marco de datos como se muestra a continuación:
a = d.to_json(orient='index')Diccionario :
{"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}Lo que necesito es que esté en una lista, esencialmente una lista de diccionario. Entonces solo agrego un [] porque ese es el formato que se usará en el resto del código.
input_dict = [a]dictado_de_entrada:
[' {"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}} ']Necesito eliminar las comillas simples justo después de [ y justo antes de ]. Además, tenga los valores PKID en forma de lista.
¿Cómo se puede lograr esto?
Rendimiento esperado :
[ {"yr":2017,"PKID":[58306, 57011],"Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":[1234,54321],"Subject":"XYZ","ID":"T002"} ]NOTA: La columna PKID tiene múltiples valores enteros que deben ser un aumento de números enteros. una cadena no es aceptable. entonces necesitamos "PKID":[58306, 57011] y no "PKID":"[58306, 57011]"
pandas.DataFrame.to_json devuelve una cadena (cadena JSON), no un diccionario. Intenta to_dict en su lugar:
>>> df col1 col2 0 1 3 1 2 4 >>> [df.to_dict(orient='index')] [{0: {'col1': 1, 'col2': 3}, 1: {'col1': 2, 'col2': 4}}] >>> df.to_dict(orient='records') [{'col1': 1, 'col2': 3}, {'col1': 2, 'col2': 4}]Aquí hay una manera:
from collections import OrderedDict d = {"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}} list(OrderedDict(sorted(d.items())).values()) # [{'ID': 'T001', 'PKID': '58306, 57011', 'Subject': 'ABC', 'yr': 2017}, # {'ID': 'T002', 'PKID': '1234,54321', 'Subject': 'XYZ', 'yr': 2018}] Tenga en cuenta que el diccionario ordenado está ordenado por claves de cadena de texto, tal como se proporciona. Es posible que desee convertirlos en números enteros primero antes de cualquier procesamiento a través de d = {int(k): v for k, v in d.items()} .
Estás convirtiendo tu diccionario a json , que es una cadena. Luego envuelves tu cadena resultante en una lista. Entonces, naturalmente, el resultado es una cadena dentro de una lista.
Pruebe en su lugar: [d] donde d es su diccionario sin formato (no json convertido