ExplodingGayFish:
Eu tenho um list
de dict
como isto:
data = [{"uid": "a1", "name": "b1"},
{"uid": "a3", "name": "b3"},
{"uid": "a4", "name": "b4"},
{"uid": "a5", "name": "b5"}]
Agora eu quero resolver isso list
com a ordem do uid
campo assim:
uid_order = ['a1', 'a5', 'a3', 'a4']
Que significa que a saída deve ser:
[{"uid": "a1", "name": "b1"},
{"uid": "a5", "name": "b5"},
{"uid": "a3", "name": "b3"},
{"uid": "a4", "name": "b4"}]
Claro, eu posso criar um novo vazio list
, em seguida, usar 2 for
loops para verificar e adicionar cada elemento, mas existe alguma maneira elegante (ou melhor a complexidade) para fazer isso?
Heap Overflow:
O (n) solução:
>>> [*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'}]