我正在尝试为一组dateutil.rrule.weekday对象生成一个人类友好的字符串表示。为此,我尝试创建一个字典WEEKDAY_TO_NAME,它将对象映射到其字符串表示形式:
import dateutil.parser
from dateutil.rrule import weekdays as WEEKDAYS
WEEKDAY_NAMES = [name[1] for name in dateutil.parser.parserinfo.WEEKDAYS]
WEEKDAY_TO_NAME = dict(zip(WEEKDAYS, WEEKDAY_NAMES))但是,这会导致一个
TypeError: unhashable type: 'weekday'有什么方法可以解决这个问题(不需要编写七个if/elif语句)吗?
发布于 2017-02-28 22:17:43
在Python3中,您需要将WEEKDAYS中的项转换为字符串:
>>> dict(zip(map(str,WEEKDAYS), WEEKDAY_NAMES))
{'SA': 'Saturday', 'TH': 'Thursday', 'SU': 'Sunday', 'WE': 'Wednesday', 'TU': 'Tuesday', 'MO': 'Monday', 'FR': 'Friday'}请注意,转换前WEEKDAYS中项目的type()为'dateutil.rrule.weekday'
>>> [type(item) for item in WEEKDAYS]
[<class 'dateutil.rrule.weekday'>, <class 'dateutil.rrule.weekday'>, <class 'dateutil.rrule.weekday'>, <class 'dateutil.rrule.weekday'>, <class 'dateutil.rrule.weekday'>, <class 'dateutil.rrule.weekday'>, <class 'dateutil.rrule.weekday'>](感谢hascode55和MSeifert指出,我以前使用的tuple()调用是不必要的。)
发布于 2017-02-28 22:33:10
我也许应该更清楚地知道我想要实现什么:一个函数weekday_to_string,它接受dateutil.rrule.weekday的一个实例作为输入,并返回一个字符串,比如“星期一”。我想在这个函数中使用字典作为查找表,所以它实际上不会首先将dateutil.rrule.weekday实例转换为字符串,因为这样我就不能再查找输入了。
下面是我最终是如何实现它的:
def weekday_to_string(weekday):
'''Converts a dateutil.rrule weekday constant to its full string representation.'''
WEEKDAY_NAMES = [name[1] for name in dateutil.parser.parserinfo.WEEKDAYS]
return WEEKDAY_NAMES[WEEKDAYS.index(weekday)]https://stackoverflow.com/questions/42510823
复制相似问题