Puedo concatenar un valor cuando se añade a un diccionario en Python?

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

en lugar de añadir listas al valor de una cierta clave que quiero para concatenar cadenas a mi valor en un bucle. Así cada iteración la clave sería asignar a un valor diferente que se ha concatenado con una nueva cadena. ¿Cómo podría hacer eso?

Publicado el 19/09/2018 a las 13:22
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
5

strLos valores son inmutables, lo que no puede concatenar una cadena a un valor existente; sólo se puede reemplazar el original con una nueva cadena formada a partir de la vieja cadena. Un defaultdictsimplifica esto.

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

setdefaultno funciona aquí porque no se puede asignar al valor de retorno de setdefault, por ejemplo,

>>> d.setdefault("foo", "") += "bar"
  File "<stdin>", line 1
SyntaxError: can't assign to function call    
Respondida el 19/09/2018 a las 13:28
fuente por usuario

votos
4

Establecer una cadena vacía como un valor por defecto, y concatenar como de costumbre

from collections import defaultdict
d = defaultdict(str)
d['a'] += 'hello'
d['a'] += 'world'
print(d)
Respondida el 19/09/2018 a las 13:27
fuente por usuario

votos
0

Podemos obtener la salida deseada por lo que tenemos idea más clara de lo que quiere decir, por lo que leí desea concatenar una cadena a un valor del diccionario?

dicta = {'vash': 'the'}

string = ' is concatenating'

lista = [' stampede', string]

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

print(dicta)

Salida:

(xenial)vash@localhost:~/python/stack_overflow$ python3.7 conc.py 
{'vash': 'the stampede is concatenating'}
Respondida el 19/09/2018 a las 15:31
fuente por usuario

votos
-1

Se puede utilizar el dict.getmétodo para un valor predeterminado de una cadena vacía en su lugar:

dictionary[key] = dictionary.get(key, '') + some_string
Respondida el 19/09/2018 a las 13:26
fuente por usuario

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