Как я могу изменить значение элемента в списке, который принадлежит словарю? - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть словарь кортежей в качестве ключей и списков с оценкой, называемый словарь , как показано ниже, из которого я только хочу изменить значения элементов в списке, которые равны 67. Например, второй элементсписок, который принадлежит ключу (1,2,3).Я написал следующий код, но я получаю сообщение об ошибке: «индексы списка должны быть целыми или нарезанными, а не str».

dictionary = { (1,2,3) : [234,67],
               (2,2,3) : [4,7]
}


for i in dictionary:
    for j in i:
        if dictionary[i][j] == 67:
           dictionary[i][j] = 50

Может ли кто-нибудь помочь мне понять, что я делаю неправильно?Я действительно в отчаянии

Ответы [ 2 ]

3 голосов
/ 05 апреля 2019

== для сравнения;= для назначений.Однако у вас также есть ошибка в том, как вы относитесь к i.i - это ключ типа (1,2,3), но вы воспринимаете его как значение dictionary[i].Если вы хотите изменить список, вам также нужен индекс в списке, так что использование enumerate поможет.

for i in dictionary:  # i is tuple like (1,2,3)
    # enumerate(dictionary[i]) yields a sequence of tuples
    # like (0, 234), (1, 67)
    for j, value in enumerate(dictionary[i]):
        if value == 67:
            dictionary[i][j] = 50

Так же, как enumerate дает вам индекс и значение из списка,Вы можете использовать метод items, чтобы получить ключ и значение при итерации по dict.

# list_value stands in for dictionary[i]
for i, list_value in dictionary.items():
    for j, value in enumerate(list_value):
        if value == 67:
            list_value[j] = 50
2 голосов
/ 05 апреля 2019

Много ошибок в вашем коде, но это должно работать:

for i in dictionary:
    for j in range(len(dictionary[i])):
        if dictionary[i][j] == 67:
            dictionary[i][j] = 50

В вашем коде for j in i относится к числам в словарных ключах.Это нельзя изменить.

...