Могу ли я сцепить значение при добавлении в словарь в Python?

голоса
3
dictionary.setdefault(key, []).append(somelist)

вместо добавления списков к значению определенного ключа, я хочу конкатенацию строк в мое значение в цикле. Таким образом, каждая итерация ключ будет отображаться на другое значение, которое было сцепленным с новой строкой. Как я могу это сделать?

Задан 19/09/2018 в 13:22
источник пользователем
На других языках...                            


4 ответов

голоса
5

strзначения являются неизменными, так что вы не можете сцепить строки к существующему значению; вы можете только заменить оригинал с новой строкой , образованной из старой строки. defaultdictУпрощает это.

>>> d = collections.defaultdict(str)
>>> d["foo"] += "bar"
>>> d["foo"] += "baz"
>>> d["foo"]
'barbaz'

setdefaultздесь не работает , потому что вы не можете присвоить возвращаемое значение setdefault, например ,

>>> d.setdefault("foo", "") += "bar"
  File "<stdin>", line 1
SyntaxError: can't assign to function call    
Ответил 19/09/2018 в 13:28
источник пользователем

голоса
4

Установите пустую строку в качестве значения по умолчанию, и конкатенации, как обычно,

from collections import defaultdict
d = defaultdict(str)
d['a'] += 'hello'
d['a'] += 'world'
print(d)
Ответил 19/09/2018 в 13:27
источник пользователем

голоса
0

Можем ли мы получить желаемый выход поэтому мы имеем четкое представление о том, что вы имеете в виду, от того, что я прочитал вы хотите объединить строку в словаре значение?

dicta = {'vash': 'the'}

string = ' is concatenating'

lista = [' stampede', string]

for i in lista:
    for k in dicta:
        dicta[k] += i

print(dicta)

Выход:

(xenial)vash@localhost:~/python/stack_overflow$ python3.7 conc.py 
{'vash': 'the stampede is concatenating'}
Ответил 19/09/2018 в 15:31
источник пользователем

голоса
-1

Вы можете использовать dict.getметод для значения по умолчанию пустой строки вместо:

dictionary[key] = dictionary.get(key, '') + some_string
Ответил 19/09/2018 в 13:26
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more