2016-07-22 2 views
0

Структура моего словаря:разница между Dict [пункт] .append (слово) и Dict [пункт] + [слово]

key    val 
item   a list of values 

Как я начал мой dict:

dict[item] = [word] 
type(dict[item]) ---> gives me list 

Когда вы спускаетесь по петле и пытаетесь добавить больше значений в список с тем же ключом, dict[item].append(word) дает мне None, тогда как dict[item] + [word] работает

Почему это так?

+1

Возможный дубликат [список Python + список против list.append()] (http://stackoverflow.com/questions/5589549/python-list- list-vs-list-append) –

+0

Кстати, 'dict [item] + [word]' не будет обновлять фактический список внутри словаря –

ответ

2
  • Код dict[item].append(word) мутирует список на dict[item], и возвращаемое значение функции append является None.
  • Код dict[item] + [word] не мутирует список по адресу dict[item] и просто вычисляет конкатенацию двух списков.

Это эквивалентно:

arr = [1] 
res = arr + [2] 
assert res == [1, 2] 
assert arr == [1] 
res = arr.append(2) 
assert res is None 
assert arr == [1, 2] 

Для примера от вопроса, чтобы работать, эквивалентный код append является:

dict[item] += [word] 
0

Используя .append()

d = {'example': ['string']} 
d['example'].append('test') # mutates the list 
print d 
>> {'example': ['string','test']} 

Использование список + список

d = {'example': ['string']} 
d['example'] + ['test'] # return {'example':['string', 'test]} but no mutation 
print d 
>> {'example': ['string']} 
Смежные вопросы