сравнивая четыре словаря, что их ключи одинаковы, но у каждого разные значения в python - PullRequest
0 голосов
/ 11 марта 2020

У меня есть четыре словаря, как показано ниже, и я хочу напечатать их в порядке их первых значений, и если они равны, то распечатать их в порядке их вторых значений, но я не могу найти способ. я попытался поместить все значения 'p' в список и отсортировать список, но опять же я не смог найти способ вызвать, какое значение для какого словаря

a = {'p':10, 'w':3}
b = {'p':2, 'w':0}
c = {'p':3, 'w':0}
d = {'p':3, 'w':1}

вывод должен будь таким:

{'p':10, 'w':3}
{'p':3, 'w':1}
{'p':3, 'w':0}
{'p':2, 'w':0}

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Используйте аргумент key для sorted, чтобы получить пользовательский порядок сортировки.

a = {'p':10, 'w':3}
b = {'p':2, 'w':0}
c = {'p':3, 'w':0}
d = {'p':3, 'w':1}

dicts = [a,b,c,d]

print(sorted(dicts, reverse=True, key=lambda d: (d['p'], d['w'])))

Для каждого dict key является кортежем значения p и значения w - что дает требуемый порядок сортировки

Вывод:

[{'p': 10, 'w': 3}, {'p': 3, 'w': 1}, {'p': 3, 'w': 0}, {'p': 2, 'w': 0}]
1 голос
/ 11 марта 2020

Использовать ключевой аргумент функции сортировки. Вот решение проблемы (обратите внимание, что обратное направление гарантирует, что сначала появится наибольшее значение).

dict_list = [a,b,c,d]
dict_list.sort(reverse=True, key=lambda x: (x['p'], x['w']))
print(dict_list)
[{'p': 10, 'w': 3}, {'p': 3, 'w': 1}, {'p': 3, 'w': 0}, {'p': 2, 'w': 0}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...