web-dev-qa-db-fra.com

Ajout de valeurs au dictionnaire dans Python

J'ai un dictionnaire auquel je souhaite ajouter à chaque médicament une liste de chiffres. Comme ça:

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

Je souhaite par la suite pouvoir accéder à l’ensemble des entrées, par exemple, 'MORPHINE'.

  1. Comment ajouter un numéro au drug_dictionary?
  2. Comment puis-je traverser chaque entrée plus tard?

Il suffit d'utiliser 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']
58
Tony Veijalainen

Vous devriez utiliser append pour ajouter à la liste. Mais aussi, voici quelques astuces de code:

J'utiliserais dict.setdefault ou defaultdict pour éviter de devoir spécifier la liste vide dans la définition du dictionnaire.

Si vous utilisez prev pour filtrer les valeurs dupliquées, vous pouvez simplifier le code en utilisant groupby de itertools Votre code avec les modifications se présente comme suit:

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 vous ne savez pas comment fonctionne groupby, vérifiez simplement cet exemple:

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

On dirait que vous essayez de configurer une liste de listes avec chacune des valeurs du dictionnaire. Votre valeur initiale pour chaque médicament dans le dict est de []. Donc, en supposant que vous ayez list1 que vous voulez ajouter à la liste pour 'MORPHINE' tu devrais faire:

drug_dictionary['MORPHINE'].append(list1)

Vous pouvez ensuite accéder aux différentes listes de la manière que vous voulez en tant que drug_dictionary['MORPHINE'][0] etc.

Pour parcourir les listes stockées avec la clé, vous feriez:

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

Pour ajouter des entrées à la table:

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)

Pour parcourir les données:

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

comment puis-je ajouter un numéro dans le drug_dictionary?

Souhaitez-vous ajouter "un nombre" ou un ensemble de valeurs?

J'utilise des dictionnaires pour construire pas mal de tableaux associatifs et de tables de recherche.

Puisque python est très doué pour la gestion des chaînes, j’utilise souvent une chaîne et ajoute les valeurs à un dict en tant que chaîne séparée par des virgules

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) 

La méthode Append permet de stocker une liste de valeurs mais laisse une virgule de fin

que vous pouvez enlever avec

drug_dictionary[drug_to_update][:-1]

le résultat de l’ajout des valeurs sous forme de chaîne signifie que vous pouvez aussi ajouter des listes de valeurs selon vos besoins et

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

peut revenir

'MORPHINE':'10,5,7,42,12,'
1
George Lambert
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)  
1
Gunjan Thareja