2010-08-05 11 views
22

Tengo un diccionario al que quiero agregarle a cada medicamento, una lista de números. De esta manera:Agregar valores al diccionario en 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 

tarde me gustaría poder tener acceso al conjunto entirr de entradas en, por ejemplo, 'MORPHINE'.

  1. ¿Cómo añado un número en el drug_dictionary?
  2. ¿Cómo atravieso más adelante cada entrada?
+6

Es posible que desee configurar su drug_dictionary como 'drug_dictionary = defaultdict (lista)'. De esta forma, no tiene que definir sus medicamentos con listas vacías de antemano, pero puede hacer 'drug_dictionary [drugname] .append (list)' sin tener la clave predefinida. 'defaultdict' requiere' de collection imports defaultdict' creo. – extraneon

+3

Hombre, este título de pregunta es engañoso. Estaba buscando cómo agregar un elemento a un diccionario ... –

Respuesta

43

sólo tiene que utilizar 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

Parece que está intentando configurar una lista de listas como cada valor en el diccionario. Su valor inicial para cada medicamento en el dict es []. Así que asumiendo que tiene lista1 que desea añadir a la lista de 'MORPHINE' que debe hacer:

drug_dictionary['MORPHINE'].append(list1) 

A continuación, puede acceder a las diferentes listas en la forma en que desea como drug_dictionary['MORPHINE'][0] etc.

Para recorrer las listas almacenadas en contra de teclas que harían:

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

Me ganaste. +1 – delnan

2

para añadir entradas a la tabla:

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) 

Para bucle a través de los datos:

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

que puedes usar anexados para agregar a la lista. Pero también aquí hay algunas sugerencias de código:

Usaría dict.setdefault o defaultdict para evitar tener que especificar la lista vacía en la definición del diccionario.

Si utiliza prev a filtrar valores duplicados se puede simplfy el código usando groupby de itertools su código con las enmiendas es el siguiente:

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 

Si usted no sabe cómo funciona GroupBy mira este ejemplo:

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

+1 buen consejo sobre groupby – Amoss

1

¿cómo añado un número en el drug_dictionary?

¿Desea agregar "un número" o un conjunto de valores?

Uso diccionarios para crear matrices asociativas y tablas de búsqueda bastante.

Como Python es tan bueno en las cadenas de manipulación, A menudo utilizo una cadena y añadir los valores en un diccionario como una cadena separada por comas

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) 

El método Append permite almacenar una lista de valores, sino hojas va detrás de un coma

que se puede retirar con

drug_dictionary[drug_to_update][:-1] 

el resultado de las adjuntando los valores como una cadena significa que se puede añadir listas de valores como sea necesario también y

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

puede volver

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

+1 para 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

Será bueno si agrega una explicación a su código. –

+1

Espero que lo entiendas mejor –

Cuestiones relacionadas