Waarden toevoegen aan woordenboek in Python

Ik heb een woordenboek dat ik aan elk medicijn wil toevoegen, een lijst met nummers. Zoals dit:

append(0), append(1234), append(123), etc.
def make_drug_dictionary(data):
    drug_dictionary={'MORPHINE':[],
                     'OXYCODONE':[],
                     'OXYMORPHONE':[],
                     'METHADONE':[],
                     'BUPRENORPHINE':[],
                     'HYDROMORPHONE':[],
                     'CODEINE':[],
                     'HYDROCODONE':[]}
    prev = None
    for row in data:
        if prev is None or prev==row[11]:
            drug_dictionary.append[row[11][]
    return drug_dictionary

Ik wil later toegang hebben tot de hele set items in bijvoorbeeld 'MORPHINE'.

  1. Hoe voeg ik een nummer toe aan de drug_dictionary?
  2. Hoe loop ik later door elk item?

Antwoord 1, autoriteit 100%

Gebruik gewoon toevoegen:

list1 = [1, 2, 3, 4, 5]
list2 = [123, 234, 456]
d = {'a': [], 'b': []}
d['a'].append(list1)
d['a'].append(list2)
print d['a']

Antwoord 2, autoriteit 27%

Je moet append gebruiken om aan de lijst toe te voegen. Maar ook hier zijn enkele codetips:

Ik zou dict.setdefaultof defaultdictgebruiken om te voorkomen dat ik de lege lijst in de woordenboekdefinitie moet specificeren.

Als u prevgebruikt om dubbele waarden uit te filteren, kunt u de code vereenvoudigen met groupbyvan itertools
Uw code met de wijzigingen ziet er als volgt uit:

import itertools
def make_drug_dictionary(data):
    drug_dictionary = {}
    for key, row in itertools.groupby(data, lambda x: x[11]):
        drug_dictionary.setdefault(key,[]).append(row[?])
    return drug_dictionary

Als je niet weet hoe groupby werkt, kijk dan eens naar dit voorbeeld:

>>> list(key for key, val in itertools.groupby('aaabbccddeefaa'))
['a', 'b', 'c', 'd', 'e', 'f', 'a']

Antwoord 3, autoriteit 7%

Het klinkt alsof u een lijst met lijsten probeert in te stellen als elke waarde in het woordenboek. Uw beginwaarde voor elk medicijn in het dictaat is []. Dus ervan uitgaande dat u lijst1 heeft die u wilt toevoegen aan de lijst voor 'MORPHINE', moet u het volgende doen:

drug_dictionary['MORPHINE'].append(list1)

Je hebt dan toegang tot de verschillende lijsten op de manier die je wilt als drug_dictionary['MORPHINE'][0]enz.

Als u de lijsten wilt doorlopen die zijn opgeslagen voor de sleutel, doet u het volgende:

for listx in drug_dictionary['MORPHINE'] :
  do stuff on listx

Antwoord 4, autoriteit 6%

Invoer toevoegen aan de tabel:

for row in data:
    name = ???     # figure out the name of the drug
    number = ???   # figure out the number you want to append
    drug_dictionary[name].append(number)

Om door de gegevens te bladeren:

for name, numbers in drug_dictionary.items():
    print name, numbers

Antwoord 5, autoriteit 3%

Als u wilt toevoegen aan de lijsten van elke sleutel in een woordenboek, kunt u nieuwe waarden toevoegen met behulp van +operator (getest in Python 3.7):

mydict = {'a':[], 'b':[]}
print(mydict)
mydict['a'] += [1,3]
mydict['b'] += [4,6]
print(mydict)
mydict['a'] += [2,8]
print(mydict)

en de uitvoer:

{'a': [], 'b': []}
{'a': [1, 3], 'b': [4, 6]}
{'a': [1, 3, 2, 8], 'b': [4, 6]}

mydict['a'].extend([1,3])Doe de klus hetzelfde als +zonder een nieuwe lijst (efficiënte manier) te maken.


Antwoord 6

Hoe voeg ik een getal toe in het Drug_Dictionary?

Wilt u “A NUMBER” of een reeks waarden toevoegen?

Ik gebruik woordenboeken om associatieve arrays en opzoektabellen nogal een beetje te bouwen.

Omdat Python zo goed is in het verwerken van snaren,
Ik gebruik vaak een tekenreeks en voeg de waarden toe in een dict als een door komma’s gescheiden string

drug_dictionary = {} 
drug_dictionary={'MORPHINE':'',
         'OXYCODONE':'',
         'OXYMORPHONE':'',
         'METHADONE':'',
         'BUPRENORPHINE':'',
         'HYDROMORPHONE':'',
         'CODEINE':'',
         'HYDROCODONE':''}
drug_to_update = 'MORPHINE'
try: 
   oldvalue = drug_dictionary[drug_to_update] 
except: 
   oldvalue = ''
# to increment a value
   try: 
      newval = int(oldval) 
      newval += 1
   except: 
      newval = 1 
   drug_dictionary[drug_to_update] = "%s" % newval
# to append a value  
   try: 
      newval = int(oldval) 
      newval += 1
   except: 
      newval = 1 
   drug_dictionary[drug_to_update] = "%s,%s" % (oldval,newval) 

Met de Append-methode kan een lijst met waarden worden opgeslagen, maar blijft er een komma achter

die je kunt verwijderen met

drug_dictionary[drug_to_update][:-1]

het resultaat van het toevoegen van de waarden als een tekenreeks betekent dat u ook zoeklijsten kunt toevoegen als dat nodig is en

print "'%s':'%s'" % ( drug_to_update, drug_dictionary[drug_to_update]) 

kan terugkeren

'MORPHINE':'10,5,7,42,12,'

Antwoord 7

vowels = ("a","e","i","o","u") #create a list of vowels  
my_str = ("this is my dog and a cat") # sample string to get the vowel count
count = {}.fromkeys(vowels,0) #create dict initializing the count to each vowel to 0                                                                    
for char in my_str :  
    if char in count:  
       count[char] += 1  
print(count)  

Antwoord 8

U kunt ook de methode update()gebruiken

d = {"a": 2}
d.update{"b": 4}
print(d) # {"a": 2, "b": 4}

Other episodes