Сортировка списка по двум словарям - PullRequest
0 голосов
/ 28 сентября 2018

Я посмотрел на различные решения для сортировки словарей и запутался.Поэтому решил задать свой вопрос здесь.

Я разрабатываю приложение для очередей, которое отдает приоритет людям, которые раньше не участвовали.После этого приоритет отдается времени запроса.

Поэтому у меня два словаря.Один отслеживает количество участников, а другой - время участия.

При нажатии кнопки я записываю время в своем первом словаре следующим образом:

dictionary1[name] = time.time()

это будет выглядеть следующим образом:

dictionary1 = {'jessi':time.time(), 'jack':time.time(), 'bob':time.time()}

Значения time.time () являются числами с плавающей запятой.Второй словарь отслеживает, сколько участников следуют:

dictionary2 = {'jack':2 , 'john':1, 'sam': 4}

Я хочу, чтобы люди с 0 участием были наверху очереди.После этого люди с меньшим количеством участников.

После сортировки по участию я хочу отсортировать людей по времени подачи.

Я видел много примеров, использующих что-то вроде:

sorted_dict = sorted(dict['values'], key=lambda k: k['a']['b'])

Однако я получаю ошибки, когда значение отсутствует в словаре 2.

из этих двух словарей, я хочу, чтобы список был упорядочен согласновышеуказанные критерии.Список должен быть сгенерирован из словаря1, но отсортирован в соответствии со значениями в словаре1 и словаре2.

Как мне подойти к этому?

РЕДАКТИРОВАТЬ:

Предполагая, что dictionary1 = {'jessi': 10,' jack ': 20,' bob ': 30} dictionary2 = {' jessi ': 1,' jack ': 2,' john ': 1,' sam ': 4} Вывод должен быть следующим: list =['bob', 'jessi', 'jack']

Бобу дан приоритет, потому что он отсутствует в словаре 2.

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете отсортировать его с помощью ключевой функции, которая возвращает кортеж количества и времени участия:

import time
dictionary1 = {'jessi':time.time()+1, 'jack':time.time(), 'bob':time.time()-1}
dictionary2 = {'jack':2 , 'john':1, 'sam': 4}
print(sorted(dictionary1, key=lambda k: (dictionary2.get(k, 0), dictionary1[k])))

Это приводит к:

['bob', 'jessi', 'jack']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...