ExplodingGayFish:
Tengo una list
de dict
la siguiente manera:
data = [{"uid": "a1", "name": "b1"},
{"uid": "a3", "name": "b3"},
{"uid": "a4", "name": "b4"},
{"uid": "a5", "name": "b5"}]
Ahora quiero resolver eso list
con el orden del uid
campo de la siguiente manera:
uid_order = ['a1', 'a5', 'a3', 'a4']
Lo que significa que la salida debe ser:
[{"uid": "a1", "name": "b1"},
{"uid": "a5", "name": "b5"},
{"uid": "a3", "name": "b3"},
{"uid": "a4", "name": "b4"}]
Por supuesto, puedo crear un nuevo vacío list
a continuación, utilizar 2 for
bucles para comprobar y añadir todos los elementos, pero ¿hay alguna manera elegante (o mejor la complejidad) para hacer esto?
Desbordamiento del montón:
O (n) solución:
>>> [*map({d['uid']: d for d in data}.get, uid_order)]
[{'uid': 'a1', 'name': 'b1'},
{'uid': 'a5', 'name': 'b5'},
{'uid': 'a3', 'name': 'b3'},
{'uid': 'a4', 'name': 'b4'}]