2010-08-05 24 views
22

Ho un dizionario a cui voglio aggiungere ogni farmaco, un elenco di numeri. Come questo:Aggiunta di valori al dizionario in Python

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 

ho poi voglio essere in grado di accedere al set entirr di voci, ad esempio, 'MORPHINE'.

  1. Come si aggiunge un numero nel drug_dictionary?
  2. Come attraversare successivamente ogni voce?
+6

si potrebbe desiderare di installare il vostro drug_dictionary come 'drug_dictionary = defaultdict (lista)'. In questo modo non devi definire preventivamente i tuoi farmaci con liste vuote, ma puoi semplicemente fare 'drug_dictionary [nome-farmaco] .append (lista)' senza avere la chiave predefinita. 'defaultdict' richiede' from collections import defaultdict' Penso. – extraneon

+3

Uomo, questo titolo della domanda è fuorviante. Stavo cercando come aggiungere un elemento a un dizionario ... –

risposta

43

Basta usare append:

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

Sembra che si stia tentando di impostare un elenco di elenchi come ogni valore nel dizionario. Il tuo valore iniziale per ogni farmaco nel dict è []. Quindi, supponendo che si dispone di lista1 che si desidera aggiungere alla lista per 'MORPHINE' si dovrebbe fare:

drug_dictionary['MORPHINE'].append(list1) 

È quindi possibile accedere alle varie liste nel modo in cui si desidera come drug_dictionary['MORPHINE'][0] ecc

Per attraversare le liste memorizzate contro chiave che avrebbero fatto:

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

Mi hai battuto. +1 – delnan

2

per accoda voci alla tabella:

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) 

per scorrere i dati:

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

si dovrebbe usare di accodamento per aggiungere alla lista. Ma anche qui ci sono alcuni suggerimenti sul codice:

Vorrei usare dict.setdefault o defaultdict per evitare di dover specificare l'elenco vuoto nella definizione del dizionario.

Se si utilizza prev per per filtrare i valori duplicati è possibile simplfy il codice utilizzando groupby da itertools il codice con le modifiche appare come segue:

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 

Se non si sa come GroupBy funziona controllare questo esempio:

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

+1 bel suggerimento su groupby – Amoss

1

come si aggiunge un numero nel drug_dictionary?

Vuoi aggiungere "un numero" o un insieme di valori?

Uso i dizionari per creare array associativi e tabelle di ricerca un po '.

Poiché pitone è così buono a stringhe di movimentazione, uso spesso una stringa e aggiungere i valori in un dizionario di come stringa separato da virgole

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) 

Il metodo Append permette di memorizzare un elenco di valori ma foglie si un trailing virgola

che si può rimuovere con

drug_dictionary[drug_to_update][:-1] 

il risultato delle aggiungendo i valori come una stringa significa che è possibile aggiungere elenchi di valori di cui hai bisogno e troppo

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

possibile tornare

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

+1 per la barba –

1
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) 
+3

Sarà utile aggiungere una spiegazione al codice. –

+1

Spero tu lo capisca meglio –

Problemi correlati