2010-08-05 15 views
22

Mam słownik, do którego chcę dołączyć do każdego leku, listę liczb. Tak:Dołączanie wartości do słownika w Pythonie

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 

I później chcą mieć dostęp do zestawu entirr wpisów, na przykład, 'MORPHINE'.

  1. Jak dodać numer do lekarskiego?
  2. Jak mogę później przejść przez każdy wpis?
+6

może chcesz ustawić swój drug_dictionary postaci 'drug_dictionary = defaultdict (lista)'. W ten sposób nie musisz wcześniej określać swoich leków z pustymi listami, ale możesz po prostu zrobić 'drug_dictionary [nazwa-leku] .append (list)' bez uprzedniego zdefiniowania klucza. 'defaultdict' wymaga' from the collections import defaultdict', jak sądzę. – extraneon

+3

Człowieku, to pytanie jest mylące. Szukałem jak dodać element do słownika ... –

Odpowiedz

43

Wystarczy użyć 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

Wygląda na to, że próbujesz ustawić listę list jako każdą wartość w słowniku. Twoja wartość początkowa dla każdego leku w dykcie to []. Więc zakładając, że masz lista1, który chcesz dołączyć do listy dla 'MORPHINE' należy zrobić:

drug_dictionary['MORPHINE'].append(list1) 

Następnie można uzyskać dostęp do różnych list w ten sposób, że chcesz jak drug_dictionary['MORPHINE'][0] itp

przemierzać wykazy zapisane na kluczu byś zrobił:

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

Pokonałeś mnie. +1 – delnan

2

aby dołączyć dane do tabeli:

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) 

pętli danych:

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

Należy użyć append, aby dodać do listy. Ale także tutaj jest kilka wskazówek dotyczących kodu:

Użyłbym dict.setdefault lub defaultdict, aby uniknąć konieczności określenia pustej listy w definicji słownika.

Jeśli używasz prev aby odfiltrować wartości zduplikowane można simplfy kod za pomocą groupby od itertools Kod z poprawkami wygląda następująco:

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 

Jeśli nie wiesz jak działa tylko GroupBy sprawdź ten przykład:

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

+1 fajna wskazówka na temat groupby – Amoss

1

Jak mogę dodać numer do lek_dictionary?

Czy chcesz dodać "liczbę" lub zestaw wartości?

Używam słowników do tworzenia tablic asocjacyjnych i tablic przeglądowych całkiem sporo.

Od pyton jest tak dobry w obchodzenia strun, często używam ciąg i dodać wartości do dict jako przecinek oddzielone ciąg

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) 

Sposób Dołącz pozwala na przechowywanie listy wartości, ale pozostawia będziesz tylną przecinek

które można usunąć z

drug_dictionary[drug_to_update][:-1] 

wyniku dołączenie wartości jako ciąg Oznacza to, że można dołączyć listy wartości, ile trzeba zbyt i

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

może powrócić

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

+1 za brodę –

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

Będzie dobrze, jeśli dodasz objaśnienia do swojego kodu. –

+1

Mam nadzieję, że rozumiesz to lepiej –

Powiązane problemy