首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python TypeError:不可散列的类型:'weekday‘

Python TypeError:不可散列的类型:'weekday‘
EN

Stack Overflow用户
提问于 2017-02-28 22:02:57
回答 2查看 124关注 0票数 0

我正在尝试为一组dateutil.rrule.weekday对象生成一个人类友好的字符串表示。为此,我尝试创建一个字典WEEKDAY_TO_NAME,它将对象映射到其字符串表示形式:

代码语言:javascript
复制
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))

但是,这会导致一个

代码语言:javascript
复制
TypeError: unhashable type: 'weekday'

有什么方法可以解决这个问题(不需要编写七个if/elif语句)吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-28 22:17:43

在Python3中,您需要将WEEKDAYS中的项转换为字符串:

代码语言:javascript
复制
>>> 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'

代码语言:javascript
复制
>>> [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()调用是不必要的。)

票数 2
EN

Stack Overflow用户

发布于 2017-02-28 22:33:10

我也许应该更清楚地知道我想要实现什么:一个函数weekday_to_string,它接受dateutil.rrule.weekday的一个实例作为输入,并返回一个字符串,比如“星期一”。我想在这个函数中使用字典作为查找表,所以它实际上不会首先将dateutil.rrule.weekday实例转换为字符串,因为这样我就不能再查找输入了。

下面是我最终是如何实现它的:

代码语言:javascript
复制
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)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42510823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档