将 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"]))

等等