Python TypeError:不可用类型:'weekday'

时间:2017-02-28 14:02:57

标签: python

我正在尝试为enter image description here个对象列表生成一个人性化的字符串表示形式。为此,我正在尝试创建一个字典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语句)?

2 个答案:

答案 0 :(得分:2)

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

>>> dict(zip(map(str,WEEKDAYS), WEEKDAY_NAMES))
{'SA': 'Saturday', 'TH': 'Thursday', 'SU': 'Sunday', 'WE': 'Wednesday', 'TU': 'Tuesday', 'MO': 'Monday', 'FR': 'Friday'}

请注意转化前type()WEEKDAYS项的'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'>]

tuple()

(感谢hascode55和MSeifert指出我以前的$( "#pa_cor" ).hover(function() { // code }); 电话是不必要的。)

答案 1 :(得分:0)

我应该更清楚一下我想要实现的目标:一个函数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)]