我正在尝试为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
语句)?
答案 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)]