Python-woordenboek bijwerken (een andere waarde toevoegen aan de bestaande sleutel)

Ik heb een eenvoudig woordenboek met sleutel, waarde:

d = {'word': 1, 'word1': 2}

Ik moet nog een waarde toevoegen (om een lijst te maken van waarden):

d = {'word': [1, 'something'], 'word1': [2, 'something1']}

Ik kan er niet mee omgaan. Enige aanwijzingen?


Antwoord 1, autoriteit 100%

Nou, je kunt gewoon gebruiken:

d['word'] = [1,'something']

Of in het geval dat de 1moet worden opgehaald:

d['word'] = [d['word'],'something']

Stel ten slotte dat u een reeks sleutels wilt bijwerken met nieuwe waarden, zoals:

to_add = {'word': 'something', 'word1': 'something1'}

je zou kunnen gebruiken:

for key,val in to_add.items():
    if key in d:
        d[key] = [d[key],val]

Antwoord 2, autoriteit 67%

Je zou een functie kunnen schrijven om dit voor je te doen:

>>> d = {'word': 1, 'word1': 2}
>>> def set_key(dictionary, key, value):
...     if key not in dictionary:
...         dictionary[key] = value
...     elif type(dictionary[key]) == list:
...         dictionary[key].append(value)
...     else:
...         dictionary[key] = [dictionary[key], value]
... 
>>> set_key(d, 'word', 2)
>>> set_key(d, 'word', 3)
>>> d
{'word1': 2, 'word': [1, 2, 3]}

Als alternatief, zoals @Dan opmerkt, kunt u een lijst gebruiken om de gegevens in eerste instantie op te slaan. Een pythonische manier als u dit doet, kunt u een custom standaarddict definiëren die de gegevens rechtstreeks aan een lijst toevoegen:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d[1].append(2)
>>> d[2].append(2)
>>> d[2].append(3)
>>> d
defaultdict(<type 'list'>, {1: [2], 2: [2, 3]})

Antwoord 3, Autoriteit 38%

Het is het gemakkelijkst als u altijd lijsten gebruikt, zelfs als u gewoon een enkele waarde hebt. Het zal gewoon een lijst met lengte zijn 1.

>>> d = {'a': [1], 'b': [2]}
>>> d
{'a': [1], 'b': [2]}
>>>
>>> d['a'].append(5)
>>> d
{'a': [1, 5], 'b': [2]}

Antwoord 4, Autoriteit 8%

U kunt uw woordenboek maken die een lijst toewijzen aan elke toets

d = {'word': [1], 'word1': [2]}

en gebruik vervolgens de volgende synthases om een ​​waarde toe te voegen aan een bestaande sleutel of om een ​​nieuw paar sleutelwaarde toe te voegen:

d.setdefault(@key,[]).append(@newvalue)

Voor uw voorbeeld is zoiets:

d = {'word': [1], 'word1': [2]}
d.setdefault('word',[]).append('something')
d.setdefault('word1',[]).append('something1')
d.setdefault('word2',[]).append('something2')   
print(d)
{'word': [1, 'something'], 'word1': [2, 'something1'], 'word2': ['something2']}

Antwoord 5, Autoriteit 8%

Dit werkt voor mij zonder dat ik iets hoef te importeren of python3 standaard in te stellen

gear = {
    'Cameras': ['77D','SL2'],
    'Lens': ['10mm','18-55mm', '50mm', '70-250mm'],
    'Mounts': ['Monopod', 'Tripod']
}
def dump(dictionary):
    print('Camera Gear: \n')
    for key, value in dictionary.items():
        print(key, value)
dump(gear)
gear['Mounts'].append('Gimbal')
dump(gear)

uitvoer:


Antwoord 6, autoriteit 4%

Bedankt voor je hulp. Zo heb ik het gedaan (met dank aan Willem Van Onsem advies):

x = (dict(Counter(tags))) #my dictionary
for i in x:
    color = "#%06x" % random.randint(0, 0xFFFFFF)
    x[i] = [x[i], color]

Antwoord 7, autoriteit 4%

Dit is wat ik zou doen. Ik hoop dat het helpt. Als je veel items aan je woordenboek moet toevoegen, is dit misschien niet de snelste route.

d = {'word':1, 'word1':2}
d['word']=[1, 'something']
d['word1']=[2, 'something1']
print(d)
{'word': [1, 'something'], 'word1': [2, 'something1']} 

Antwoord 8

je zou het onderstaande kunnen proberen:

d['word'] = [1, 'something']

d['word1'] = [2, 'something']

bel dnu

Hopelijk helpt dit!

Other episodes