Python TypeError:不可处理的类型:“weekday”

2024-05-16 21:47:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为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语句)?你知道吗


Tags: to对象字符串nameimportparser列表names
2条回答

在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()调用是不必要的。)

我也许应该更清楚我想要实现什么:一个函数weekday_to_string,它以dateutil.rrule.weekday的一个实例作为输入,并返回一个字符串,比如“Monday”。我想在这个函数中使用字典作为查找表,因此实际上不需要先将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)]

相关问题 更多 >