2

我有 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%'}

帮我

4

3 回答 3

6

字典不应该被认为是有序的

事实上,它们在 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%')])
于 2018-11-19T12:42:22.997 回答
0

如前所述,字典没有排序,但您可以在转换为字典之前订购。

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

按天排序,只需旋转 zip:

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%'}
于 2018-11-19T12:45:30.737 回答
0

你可以试试这个:

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%')])  
于 2018-11-19T12:53:45.847 回答