I pode concatenar um valor para adicionar a um dicionário em Python?

votos
3
dictionary.setdefault(key, []).append(somelist)

em vez de anexar listas para o valor de uma determinada tecla quero concatenar strings para o meu valor em um loop. Então cada iteração a chave seria mapear para um valor diferente que tem sido concatenado com uma nova string. Como eu poderia fazer isso?

Publicado 19/09/2018 em 13:22
fonte usuário
Em outras línguas...                            


4 respostas

votos
5

strOs valores são imutáveis, então você não pode concatenar uma string para um valor existente; você só pode substituir o original com uma nova string formada a partir da cadeia de idade. Um defaultdictsimplifica esta.

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

setdefaultnão funciona aqui, porque você não pode atribuir ao valor de retorno setdefault, por exemplo

>>> d.setdefault("foo", "") += "bar"
  File "<stdin>", line 1
SyntaxError: can't assign to function call    
Respondeu 19/09/2018 em 13:28
fonte usuário

votos
4

Definir uma seqüência vazia como um valor padrão, e concatenar as usual

from collections import defaultdict
d = defaultdict(str)
d['a'] += 'hello'
d['a'] += 'world'
print(d)
Respondeu 19/09/2018 em 13:27
fonte usuário

votos
0

Podemos obter desejado saída por isso temos imagem mais clara do que você quer dizer, pelo que eu li você quiser concatenar uma string para um valor dicionário?

dicta = {'vash': 'the'}

string = ' is concatenating'

lista = [' stampede', string]

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

print(dicta)

Saída:

(xenial)vash@localhost:~/python/stack_overflow$ python3.7 conc.py 
{'vash': 'the stampede is concatenating'}
Respondeu 19/09/2018 em 15:31
fonte usuário

votos
-1

Você pode usar o dict.getmétodo para um valor padrão de uma cadeia vazia em vez disso:

dictionary[key] = dictionary.get(key, '') + some_string
Respondeu 19/09/2018 em 13:26
fonte usuário

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