Сортировать python список основ другой список - PullRequest
2 голосов
/ 26 апреля 2020

У меня есть следующий основной список:

[
   {'entity': 'Country', 'cnt': 4},
   {'entity': 'State', 'cnt': 3},
   {'entity': 'City', 'cnt': 2}
]

Обратите внимание на порядок объектов.

I wi sh, чтобы заказать другой список на основе порядка объектов в первом list.

Второй список:

[
   {'entity': 'State', 'values': 'AK'},
   {'entity': 'Country', 'values': 'USA'}
]

Желаемый вывод:

[
   {'entity': 'Country', 'values': 'USA'},
   {'entity': 'State', 'values': 'AK'}
]

Я пробовал следующее:

secondList.sort(key=lambda x: firstList.index(x["entity"]))

Однако, это дает мне ошибка, так как Сити не найден во втором списке.

Может кто-нибудь сказать мне, что я здесь делаю не так?

Ответы [ 2 ]

6 голосов
/ 26 апреля 2020

Вы можете сделать небольшую предварительную обработку:

master = [
   {'entity': 'Country', 'cnt': 4},
   {'entity': 'State', 'cnt': 3},
   {'entity': 'City', 'cnt': 2}
]

to_sort = [
   {'entity': 'State', 'values': 'AK'},
   {'entity': 'Country', 'values': 'USA'}
]

prep = { record['entity'] : i for  i, record in enumerate(master)  }


sorted(to_sort, key = lambda x: prep[x['entity']])
1 голос
/ 26 апреля 2020

Как упоминает @Christian, вы можете выполнить небольшую предварительную обработку. Если это не вариант, вы можете сделать следующее, однако производительность будет хуже таким образом.

def custom_sort(item):
    key = item['entity']
    for idx, ent in enumerate(master):
        if key == ent['entity']:
            return idx

sorted(data, key=custom_sort)

[{'entity': 'Country', 'values': 'USA'}, {'entity': 'State', 'values': 'AK'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...