将 Tuple Tuple 转换(和反转)为 dict 时出错
Error when transforming (and reversing) Tuple Tuple to dict
我正在尝试将以下元组 tuple 转换为字典(以及其中的反向字典):
EDIT_TUTORING_PLACES_CHOICES_TRANSLATOR = (
(AT_STUDENT, ['1']),
(AT_TUTOR, ['2']),
(ONLINE, ['3']),
(AT_STUDENT_AND_TUTOR, ['1', '2']),
(AT_STUDENT_AND_ONLINE, ['1', '3']),
(AT_TUTOR_AND_ONLINE, ['2', '3']),
(ALL, ['1', '2', '3']),
)
这是我使用的代码:
dict = {v: k for k, v in list(EDIT_TUTORING_PLACES_CHOICES_TRANSLATOR)}
我收到以下错误:
TypeError: unhashable type: 'list'
我应该怎么做?非常感谢!
字典将以列表作为键,这是不可能的。
我用嵌套的 if/else 语句解决了这个问题:
def tutor_place_array_to_int(arr: list[str]):
if arr.count('1') > 0:
if arr.count('2') > 0:
if arr.count('3') > 0:
return ALL
else:
return AT_STUDENT_AND_TUTOR
else:
if arr.count('3') > 0:
return AT_STUDENT_AND_ONLINE
else:
return AT_STUDENT
else:
if arr.count('2') > 0:
if arr.count('3') > 0:
return AT_TUTOR_AND_ONLINE
else:
return AT_TUTOR
else:
if arr.count('3') > 0:
return ONLINE
return None
ALL、AT_STUDENT_AND_TUTO等都是表示整数的常量
你是对的,列表不能用作 python dict 中的键,因为键必须是不可变的。
但是,您可以使用元组而不是列表来归档您的目标(因为元组是不可变的)
要创建你的字典使用
tutor_place_array_to_int_map = {tuple(v): k for k, v in list(EDIT_TUTORING_PLACES_CHOICES_TRANSLATOR)}
这样你在 dict 中的键是不可变的元组,然后你就可以使用:
sth = tutor_place_array_to_int_map[("1", "2")]
sth = tutor_place_array_to_int_map.get(("1", "2"))
sth = tutor_place_array_to_int_map.get(tuple(["1", "2"]))
等等
我正在尝试将以下元组 tuple 转换为字典(以及其中的反向字典):
EDIT_TUTORING_PLACES_CHOICES_TRANSLATOR = (
(AT_STUDENT, ['1']),
(AT_TUTOR, ['2']),
(ONLINE, ['3']),
(AT_STUDENT_AND_TUTOR, ['1', '2']),
(AT_STUDENT_AND_ONLINE, ['1', '3']),
(AT_TUTOR_AND_ONLINE, ['2', '3']),
(ALL, ['1', '2', '3']),
)
这是我使用的代码:
dict = {v: k for k, v in list(EDIT_TUTORING_PLACES_CHOICES_TRANSLATOR)}
我收到以下错误:
TypeError: unhashable type: 'list'
我应该怎么做?非常感谢!
字典将以列表作为键,这是不可能的。 我用嵌套的 if/else 语句解决了这个问题:
def tutor_place_array_to_int(arr: list[str]):
if arr.count('1') > 0:
if arr.count('2') > 0:
if arr.count('3') > 0:
return ALL
else:
return AT_STUDENT_AND_TUTOR
else:
if arr.count('3') > 0:
return AT_STUDENT_AND_ONLINE
else:
return AT_STUDENT
else:
if arr.count('2') > 0:
if arr.count('3') > 0:
return AT_TUTOR_AND_ONLINE
else:
return AT_TUTOR
else:
if arr.count('3') > 0:
return ONLINE
return None
ALL、AT_STUDENT_AND_TUTO等都是表示整数的常量
你是对的,列表不能用作 python dict 中的键,因为键必须是不可变的。 但是,您可以使用元组而不是列表来归档您的目标(因为元组是不可变的) 要创建你的字典使用
tutor_place_array_to_int_map = {tuple(v): k for k, v in list(EDIT_TUTORING_PLACES_CHOICES_TRANSLATOR)}
这样你在 dict 中的键是不可变的元组,然后你就可以使用:
sth = tutor_place_array_to_int_map[("1", "2")]
sth = tutor_place_array_to_int_map.get(("1", "2"))
sth = tutor_place_array_to_int_map.get(tuple(["1", "2"]))
等等