Добавление новых значений в словарь Python

1

Я пытаюсь добавить новое значение пары ключей в словарь:

То, что мой код выводит на данный момент:

dict_items([((2, 2), 2)])

То, что я действительно хочу:

{(0, 0): 0}, {(0, 1): 2}, {(0, 2): 3}, {(1, 0): 1}, {(1, 1): 1}, {(1, 2): 2}, {(2, 0): 5}, {(2, 1): 3}, {(2, 2): 2}

Может ли кто-нибудь объяснить, как обновить словарь с новыми парами значений ключей? Я попытался использовать вызов функции обновления, но получил следующую ошибку:

TypeError: unhashable type: 'set'

Любая помощь высоко ценится!

    distanceList = []
    trainingset = [5, 6, 10]
    testset = [5,7,8]

    for i in trainingset:
        for j in testset:
            distance = abs(i-j)
            values = dict()
            values[trainingset.index(i),testset.index(j)] = distance
            # values.update({{trainingset.index(i),testset.index(j)}:distace})
            distanceList.append(distance)

    print(distanceList)
    print(values.items())
Теги:
dictionary

1 ответ

0
Лучший ответ

Ошибка "unhashable type: set" означает, что вы пытаетесь использовать заданный объект в качестве словарного ключа, а наборы не могут быть ключами словарей.

И хотя я не думаю, что вы намеренно пытаетесь создать набор или использовать его в качестве словарного ключа, это то, что делает эта строка:

values.update({{trainingset.index(i),testset.index(j)}:distace})

(Внутренние фигурные скобки, без внутреннего двоеточия, создадут заданный объект).

Если вы просто хотите кортеж, как показывает ваш пример, попробуйте:

values.update({(trainingset.index(i),testset.index(j)):distace})

Это должно работать, если вы сделаете еще несколько небольших изменений (например, distacedistance, поднимите свое создание values за пределами ваших циклов).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню