Kan jeg sette sammen en verdi når du legger til en ordbok i Python?

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

i stedet for å legge lister til verdien av en bestemt nøkkel jeg ønsker å sette sammen strenger til min verdi i en loop. Så hver iterasjon nøkkelen ville kartlegge til en annen verdi som er sammenkjedet med en ny streng. Hvordan kunne jeg gjøre det?

Publisert på 19/09/2018 klokken 13:22
kilden bruker
På andre språk...                            


4 svar

stemmer
5

strverdier er uforanderlig, slik at du ikke kan sette sammen en streng til en eksisterende verdi; kan du bare erstatte den opprinnelige med en ny streng dannet fra den gamle strengen. En defaultdictforenkler dette.

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

setdefaultfungerer ikke her fordi du ikke kan tilordne returverdien av setdefault, for eksempel

>>> d.setdefault("foo", "") += "bar"
  File "<stdin>", line 1
SyntaxError: can't assign to function call    
Svarte 19/09/2018 kl. 13:28
kilden bruker

stemmer
4

Sett en tom streng som standardverdi, og sette sammen som vanlig

from collections import defaultdict
d = defaultdict(str)
d['a'] += 'hello'
d['a'] += 'world'
print(d)
Svarte 19/09/2018 kl. 13:27
kilden bruker

stemmer
0

Kan vi få ønsket effekt, slik at vi har klarere bilde av hva du mener, fra hva jeg leser du ønsker å sette sammen en streng til en ordbok verdi?

dicta = {'vash': 'the'}

string = ' is concatenating'

lista = [' stampede', string]

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

print(dicta)

Produksjon:

(xenial)vash@localhost:~/python/stack_overflow$ python3.7 conc.py 
{'vash': 'the stampede is concatenating'}
Svarte 19/09/2018 kl. 15:31
kilden bruker

stemmer
-1

Du kan bruke dict.getmetoden for en standardverdi på en tom streng i stedet:

dictionary[key] = dictionary.get(key, '') + some_string
Svarte 19/09/2018 kl. 13:26
kilden bruker

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