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'
.
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']
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']
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
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
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,'
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)