Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2015 13:29:59

Period
Зарегистрирован: 2015-10-07
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как создать ссылку на значение в словаре

Предположим есть код:

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(…)(…)(…)(…)(…)(…)?

Отредактировано Period (Ноя. 24, 2015 14:03:18)

Офлайн

#2 Ноя. 24, 2015 13:45:02

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Как создать ссылку на значение в словаре

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 значения:
словарь: ключ для которого нужно поменять значение: новое значение и использовать уже ее.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Ноя. 24, 2015 14:12:26

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Как создать ссылку на значение в словаре

Вот вариант с функцией, но ИХМО это костыль.

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}}



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Ноя. 24, 2015 14:24:54

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Как создать ссылку на значение в словаре

Я предлагал другой вариант. но он тоже костольето!



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version