Разделяйте диктанты на три списка, сохраняя порядок на основе ключа - PullRequest
0 голосов
/ 06 июня 2018

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

dict1 = {'America': 200, 'Europe': 344, 'Asia': 204, 'Oceania': 38, 'Africa': 14}
dict2 = {'Europe': 394, 'America': 225, 'Asia': 293, 'Oceania': 43, 'Africa': 26}
dict3 = {'Europe': 420, 'America': 250, 'Asia': 363, 'Oceania': 43, 'Africa': 27}

Я хотел бы сделать следующее: разбить словари натри списка, которые «разделены» должным образом на основе их ключевых значений, например:

list1 = [200, 344, 204, 38, 14]
list2 = [225, 394, 293, 43, 26]
list3 = [250, 420, 363, 43, 27]

РЕДАКТИРОВАТЬ: желаемый порядок = ['America', 'Europe', 'Asia', 'Oceania',«Африка»]

Это легко возможно?Я перепробовал несколько циклов for, но не могу правильно сохранить порядок.

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Если порядок ключей произвольный, то вам нужно жестко закодировать его в несколько итераций.Затем вы можете использовать понимание списка, чтобы получить значения из ключей в нужном порядке.

d1 = {'America': 200, 'Europe': 344, 'Asia': 204, 'Oceania': 38, 'Africa': 14}
d2 = {'Europe': 394, 'America': 225, 'Asia': 293, 'Oceania': 43, 'Africa': 26}
d3 = {'Europe': 420, 'America': 250, 'Asia': 363, 'Oceania': 43, 'Africa': 27}

order = ['America', 'Europe', 'Asia', 'Oceania', 'Africa']

list1 = [d1[k] for k in order] # [200, 344, 204, 38, 14]
list2 = [d2[k] for k in order] # [225, 394, 293, 43, 26]
list3 = [d3[k] for k in order] # [250, 420, 363, 43, 27]
0 голосов
/ 07 июня 2018

Итак, я нашел лучшее решение благодаря @abarnert:

list1 = [count_2016[key] for key in sorted(count_2016)]
list2 = [count_2017[key] for key in sorted(count_2017)]
list3 = [count_2018[key] for key in sorted(count_2018)]

Это сохраняет один и тот же порядок для каждого списка.

0 голосов
/ 06 июня 2018

В Python есть встроенный метод для словарей

list1 = dict1.values()

и т.д ...

приводит к

dict_values([200, 344, 204, 38, 14])

Также вы можете использовать списочные выражения

list1 = [x for y,x in dict1.items()]

приводит к

[200, 344, 204, 38, 14]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...