Найти - Пользователи
Полная версия: Как создать ссылку на значение в словаре
Начало » Python для новичков » Как создать ссылку на значение в словаре
1
Period
Предположим есть код:
a = {'one': {'a': 1, 'b': 2, 'c': 3}, 'two': {}}
b = a['one'] # ={'a': 1, 'b': 2, 'c': 3}
b['a'] = 21
print(a) #{'two': {}, 'one': {'a': 21, 'b': 2, 'c': 3}}
Всё работает. Словарь - изменяемый тип, поэтому b = a('one') - это ссылка на значение в a.

Но я хочу сделать вот так:
a = {'one': {'a': 1, 'b': 2, 'c': 3}, 'two': {}}
b = a['one']['a'] # =1
b = 21
print(a) #{'two': {}, 'one': {'a': 1, 'b': 2, 'c': 3}}
С b = a('one')('a') номер не проходит. Изменение b никак не сказывается на a, потому что у нас неизменяемый тип Integer.

Как это можно обойти? Есть огромный многовложенный массив. Нужно создать переменную-ссылку на какое-нибудь его конечное значение. Чтобы можно было удалить, изменить его, не записывая длиннющие конструкции a(…)(…)(…)(…)(…)(…)?
ZerG
a = {'one': {'a': 1, 'b': 2, 'c': 3}, 'two': {}}
print a['one']['a']
1
a['one']['a'] = 10
print a['one']['a']
10
Так что все правильно
Когда вы пишите
b = a['one']['a']
учитывая что
a['one']['a']=1
Это тоже самое что
 b = 1
Естественно, когда вы изменяете B то изменяется переменная а не значение ключа в словаре которое вы этой переменной и присвоили.

Возможно подойти к вопросу с другой стороны
a = {'one': {'a': 1, 'b': 2, 'c': 3}, 'two': {}}
b = 100
a['one']['a'] = b
print a['one']['a']
100
Однако уверен что данный вопрос это не решит.
По сему проще наверное написать функцию которая принимает 3 значения:
словарь: ключ для которого нужно поменять значение: новое значение и использовать уже ее.
Rodegast
Вот вариант с функцией, но ИХМО это костыль.
a = {'one': {'a': 1, 'b': 2, 'c': 3}, 'two': {}}
def B(data):
    a["one"]["a"] = data
B(range(10))
print a
{'two': {}, 'one': {'a': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 'c': 3, 'b': 2}}
ZerG
Я предлагал другой вариант. но он тоже костольето!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB