Изменение кортежа в списке в словаре

#python #python-3.x

#python #python-3.x

Вопрос:

 D = {'A':
        [ ( '1','2' ), ( '3', '4' )],
     'B':
        [ ( '5','6' ), ( '7','8' ) ]
    }

x = '6'

for key in D:
    for val in D[key]:
        if x in val:
            val=('50','60')
        
print(D)
  

Здравствуйте, я хочу внести изменения в значение ключа B, но мне интересно, почему он не печатает это:

     D = {'A':
            [ ( '1','2' ), ( '3','4' ) ],
         'B':
            [ ( '50','60' ), ( '7','8' ) ]
        }
  

Как я могу это исправить?

Ответ №1:

При этом val=('50','60') вы заменяете саму переменную, а не содержимое списка.

 for d_val in D.values():
    for rank, val in enumerate(d_val):
        if x in val:
            d_val[rank] = ('50', '80')
  

Комментарии:

1. Вы могли бы улучшить это, выполнив итерацию D.values() , потому что вам вообще не нужны ключи.

Ответ №2:

val является локальной ссылкой на элемент. Когда вы перезаписываете его, вы просто присваиваете этой переменной новый кортеж — он не имеет ничего общего со списком, который его содержит. Вместо этого вы могли бы выполнять цикл индексов списка и обновлять список напрямую:

 for key in D:
    for i in range(len(D[key])):
        if x in D[key][i]:
            D[key][i] = (50,50)
  

Ответ №3:

Вы можете использовать понимание словаря, чтобы сделать это в одной строке.

Вот ваш код для определения словаря d и значения x

 d = {'A':
        [ ( '1','2' ), ( '3', '4' )],
     'B':
        [ ( '5','6' ), ( '7','8' ) ]
    }
x = '6'
  

Приведенная ниже строка кода d снова создаст словарь с новым значением. Чтобы показать вам, что d и r отличаются лишь небольшой разницей, я сохранил dictionary d .

 r = {k:[(50,60) if x in i else i for i in d[k]] for k in d.keys()}
  

Чтобы убедиться, что есть только одно изменение, я печатаю оба d и r .

 print (d)
print (r)
  

Результат будет следующим:

 {'A': [('1', '2'), ('3', '4')], 'B': [('5', '6'), ('7', '8')]}
{'A': [('1', '2'), ('3', '4')], 'B': [(50, 60), ('7', '8')]}
  

Ответ №4:

Кортежи не могут быть отредактированы. Вот так! Хорошего дня!

Комментарии:

1. Я не думаю, что OP просит изменить значение кортежа. Вместо этого OP запрашивает замену элемента в списке. Прочитайте вопрос правильно.