Пользовательский список сортировки словарей по другому словарю или списку - PullRequest
0 голосов
/ 04 августа 2020

У меня есть список словарей, которые я хотел бы заказать на основе внешнего упорядочения (список, словарь, все, что работает). Допустим, у меня есть следующий список:

list_a = [{"dylan": "alice"}, {"arnie": "charles"}, {"chelsea": "bob"}]

, и я хочу отсортировать его вот так

sorted_list_a = [{"arnie": "charles"}, {"chelsea": "bob"}, {"dylan": "alice"}]

Я пытался сделать это вот так:

# list_a will have a variable number of dictionaries all with unique keys
# list_order will have all dictionary keys ordered, even if they don't appear in list_a
list_order = [{"arnie": 1}, {"britta": 2}, {"chelsea": 3}, {"dylan": 4}]
list_a.sort(key=lambda x: list_order[x.keys()])

, а я получаю TypeError: list indices must be integers or slices, not dict_keys. Я чувствую, что близок, но не могу дойти до конца.

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Попробуйте следующее:

def fun(x):
    k, = (x)
    for d in list_order:
        if k in d:
            return d[k]

res = sorted(list_a, key=fun)
print(res)

Вывод:

[{'arnie': 'charles'}, {'chelsea': 'bob'}, {'dylan': 'alice'}]
0 голосов
/ 04 августа 2020
  l = [{"dylan": "alice"}, {"arnie": "charles"}, {"chelsea": "bob"}]
d={}
for i in l:
    for x,y in (i.items()):
       d[x]=y
print(sorted(d.items(),key=lambda x: x[0]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...