Добавление значений в словарь в Python - PullRequest
29 голосов
/ 06 августа 2010

У меня есть словарь, к которому я хочу добавить к каждому препарату список номеров. Как это:

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

Позже я хочу получить доступ к набору записей entirr, например, 'MORPHINE'.

  1. Как мне добавить номер в наркологический словарь?
  2. Как мне позже пройти через каждую запись?

Ответы [ 6 ]

58 голосов
/ 06 августа 2010

Просто используйте 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']
15 голосов
/ 06 августа 2010

Вы должны использовать append для добавления в список.Но также есть несколько советов по коду:

Я бы использовал dict.setdefault или defaultdict, чтобы избежать необходимости указывать пустой список в определении словаря.

Если вы используете prev длячтобы отфильтровать дублированные значения, вы можете упростить код, используя groupby из itertools Ваш код с изменениями выглядит следующим образом:

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

Если вы не знаете, как работает groupby, просто проверьте этот пример:

>>> list(key for key, val in itertools.groupby('aaabbccddeefaa'))
['a', 'b', 'c', 'd', 'e', 'f', 'a']
3 голосов
/ 06 августа 2010

Чтобы добавить записи в таблицу:

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)

Для циклического перебора данных:

for name, numbers in drug_dictionary.items():
    print name, numbers
3 голосов
/ 06 августа 2010

Звучит так, как будто вы пытаетесь настроить список списков для каждого значения в словаре.Ваше начальное значение для каждого препарата в диктанте составляет [].Итак, предполагая, что у вас есть list1, который вы хотите добавить в список для 'MORPHINE', вы должны сделать:

drug_dictionary['MORPHINE'].append(list1)

Затем вы можете получить доступ к различным спискам так, как вам нужно, как drug_dictionary['MORPHINE'][0] и т. Д.

Чтобы просмотреть списки, сохраненные для ключа, вы должны сделать:

for listx in drug_dictionary['MORPHINE'] :
  do stuff on listx
1 голос
/ 28 июля 2017
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 голос
/ 06 августа 2010

как мне добавить число в drug_dictionary?

Вы хотите добавить "число" или набор значений?

Я немного использую словари для создания ассоциативных массивов и таблиц поиска.

Поскольку python очень хорош в обработке строк, я часто использую строку и добавляю значения в dict как запятуюразделенная строка

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) 

Метод Append позволяет сохранять список значений, но оставляет запятую с запятой

, которую можно удалить с помощью

drug_dictionary[drug_to_update][:-1]

результатадобавление значений в виде строки означает, что вы можете добавлять списки значений так, как вам нужно, и

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

может возвращать

'MORPHINE':'10,5,7,42,12,'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...