#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 запрашивает замену элемента в списке. Прочитайте вопрос правильно.