как заказать словарь по ключу по дням в питоне - PullRequest
0 голосов
/ 19 ноября 2018

У меня было 2 списка

daydate=['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']

percentday=['0%', '17%', '27%', '11%', '7%', '19%', '19%']

Я преобразовал в словарь, выполнив

daydic=dict(zip(daydate, percentday))

вывод будет выглядеть как

{'Monday': '17%', 'Tuesday': '27%', 'Friday': '19%', 'Wednesday': '11%', 'Thursday': '7%', 'Sunday': '0%', 'Saturday': '19%'}

Я хочу отсортировать этот словарь по порядку элементов по дням, как показано ниже

{'Sunday': '0%','Monday': '17%', 'Tuesday': '27%', 'Wednesday': '11%', 'Thursday': '7%', , 'Friday': '19%','Saturday': '19%'}

Помогите мне

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Как сказано, диктат не заказан, но вы можете заказать, прежде чем конвертировать в диктат.

daydate=['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
percentday=['0%', '17%', '27%', '11%', '7%', '19%', '19%']

Сортировка по дням, просто поверните почтовый индекс:

dayzip = list(zip(daydate, percentday))
dayzip = dayzip[1-len(dayzip):] + dayzip[:1-len(dayzip)]
daydict = dict(dayzip)

#=> {'Sunday': '0%', 'Monday': '17%', 'Tuesday': '27%', 'Wednesday': '11%', 'Thursday': '7%', 'Friday': '19%', 'Saturday': '19%'}

Сортировать по процентам:

dayzip = list(zip(daydate, percentday))
dayzip.sort(key=lambda x: float(x[1][:-1]) )
daydict = dict(dayzip)


#=> [('Sunday', '0%'), ('Monday', '17%'), ('Tuesday', '27%'), ('Wednesday', '11%'), ('Thursday', '7%'), ('Friday', '19%'), ('Saturday', '19%')]
#=> {'Sunday': '0%', 'Thursday': '7%', 'Wednesday': '11%', 'Monday': '17%', 'Friday': '19%', 'Saturday': '19%', 'Tuesday': '27%'}
0 голосов
/ 19 ноября 2018

Вы можете попробовать это:

from collections import OrderedDict
daydic={'Friday': '19%', 'Wednesday': '11%', 'Monday': '17%', 'Thursday': '7%', 'Saturday': '19%', 'Sunday': '0%', 'Tuesday': '27%'}
weeks=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
print(OrderedDict(sorted(daydic.items(),key =lambda x:weeks.index(x[0]))))

Это будет выводить как:

OrderedDict([('Sunday', '0%'), ('Monday', '17%'), ('Tuesday', '27%'), ('Wednesday', '11%'),
 ('Thursday', '7%'), ('Friday', '19%'), ('Saturday', '19%')])  
0 голосов
/ 19 ноября 2018

Словари не следует считать упорядоченными

На самом деле они упорядочены по вставке в Python 3.6+ (официально 3.7+), но даже в этом случае вы должны предпочитать чтобы использовать OrderedDict для надежного упорядоченного отображения.

Кроме того, вам никогда не придется вводить дни недели вручную, вы можете импортировать из calendar.day_name и вращаться с помощью deque:

from calendar import day_name
from collections import deque, OrderedDict

daydate = deque(day_name)
daydate.rotate(1)

percentday = ['0%', '17%', '27%', '11%', '7%', '19%', '19%']

res = OrderedDict(zip(daydate, percentday))

OrderedDict([('Sunday', '0%'),
             ('Monday', '17%'),
             ('Tuesday', '27%'),
             ('Wednesday', '11%'),
             ('Thursday', '7%'),
             ('Friday', '19%'),
             ('Saturday', '19%')])
...