Python – Ordenar en orden ascendente en un archivo txt

Tuve un gran documento que analicé usando expresiones regulares para dar un archivo txt (json.dump) similar al siguiente:

{ "stuff": [ { "name": [ "frfer", "niddsi", ], "number": 11300, "identifier": "Tsdsad" }, { "name": [ "Fast", "Guard", "Named", ], "number": 117900, "identifier": "Pdfms" }, { name: [ "Fast", ], "number": 660, "identifier": "Unnamed" }, ] } 

Ahora me gustaría ordenar este documento en orden ascendente según el número. (es decir, primero “Pdfms”, segundo “Tsdsad”, tercero “Sin nombre”). No estoy seguro de cómo empezar esto en Python, ¿podría alguien darme un punto en la dirección correcta? Gracias por adelantado

Primer problema: Eso no es legítimo JSON. Tiene comas adicionales (a JSON no le gusta [a,b,c,] ; insiste en [a,b,c] ) en la fuente, y tiene algunos identificadores (la tercera instancia del name , por ejemplo) que son no citado. Idealmente, mejorará su análisis de archivos de texto inicial y JSONification para solucionar esos problemas. O puedes manejar esos arreglos sobre la marcha, así:

 json_source = """ ... your text data from above ... """ import re BADCOMMA = re.compile(r',\s+\]') json_source = BADCOMMA.sub(']', json_source) BADIDENTIFIER = re.compile(r'\s+name:\s*') json_source = BADIDENTIFIER.sub('"name":', json_source) 

Tenga cuidado, suponiendo que pueda solucionar todos los problemas posibles sobre la marcha es un patrón frágil . Edición de archivos de datos estructurados a través de expresiones regulares, de la misma manera. Mejor generar un buen JSON desde el principio.

Ahora, cómo ordenar:

 import json data = json.loads(json_source) data['stuff'].sort(key=lambda item: item['number'], reverse=True) 

Eso hace una clasificación en el lugar de la matriz de “cosas”, por el valor “número”, y la invierte (porque su ejemplo de cómo desea que la salida sugiera una clasificación descendente en lugar de la clasificación ascendente típica).

Para demostrar que el ordenamiento ha hecho lo que desea, el módulo pprint puede ser útil:

 from pprint import pprint pprint(data) 

Rendimientos:

 {u'stuff': [{u'identifier': u'Pdfms', u'name': [u'Fast', u'Guard', u'Named'], u'number': 117900}, {u'identifier': u'Tsdsad', u'name': [u'frfer', u'niddsi'], u'number': 11300}, {u'identifier': u'Unnamed', u'name': [u'Fast'], u'number': 660}]}