Ik heb een woordenboek dat ik aan elk medicijn wil toevoegen, een lijst met nummers. Zoals dit:
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
Ik wil later toegang hebben tot de hele set items in bijvoorbeeld 'MORPHINE'
.
- Hoe voeg ik een nummer toe aan de drug_dictionary?
- Hoe loop ik later door elk item?
Antwoord 1, autoriteit 100%
Gebruik gewoon toevoegen:
list1 = [1, 2, 3, 4, 5]
list2 = [123, 234, 456]
d = {'a': [], 'b': []}
d['a'].append(list1)
d['a'].append(list2)
print d['a']
Antwoord 2, autoriteit 27%
Je moet append gebruiken om aan de lijst toe te voegen. Maar ook hier zijn enkele codetips:
Ik zou dict.setdefault
of defaultdict
gebruiken om te voorkomen dat ik de lege lijst in de woordenboekdefinitie moet specificeren.
Als u prev
gebruikt om dubbele waarden uit te filteren, kunt u de code vereenvoudigen met groupby
van itertools
Uw code met de wijzigingen ziet er als volgt uit:
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
Als je niet weet hoe groupby werkt, kijk dan eens naar dit voorbeeld:
>>> list(key for key, val in itertools.groupby('aaabbccddeefaa'))
['a', 'b', 'c', 'd', 'e', 'f', 'a']
Antwoord 3, autoriteit 7%
Het klinkt alsof u een lijst met lijsten probeert in te stellen als elke waarde in het woordenboek. Uw beginwaarde voor elk medicijn in het dictaat is []
. Dus ervan uitgaande dat u lijst1 heeft die u wilt toevoegen aan de lijst voor 'MORPHINE'
, moet u het volgende doen:
drug_dictionary['MORPHINE'].append(list1)
Je hebt dan toegang tot de verschillende lijsten op de manier die je wilt als drug_dictionary['MORPHINE'][0]
enz.
Als u de lijsten wilt doorlopen die zijn opgeslagen voor de sleutel, doet u het volgende:
for listx in drug_dictionary['MORPHINE'] :
do stuff on listx
Antwoord 4, autoriteit 6%
Invoer toevoegen aan de tabel:
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)
Om door de gegevens te bladeren:
for name, numbers in drug_dictionary.items():
print name, numbers
Antwoord 5, autoriteit 3%
Als u wilt toevoegen aan de lijsten van elke sleutel in een woordenboek, kunt u nieuwe waarden toevoegen met behulp van +
operator (getest in Python 3.7):
mydict = {'a':[], 'b':[]}
print(mydict)
mydict['a'] += [1,3]
mydict['b'] += [4,6]
print(mydict)
mydict['a'] += [2,8]
print(mydict)
en de uitvoer:
{'a': [], 'b': []}
{'a': [1, 3], 'b': [4, 6]}
{'a': [1, 3, 2, 8], 'b': [4, 6]}
mydict['a'].extend([1,3])
Doe de klus hetzelfde als +
zonder een nieuwe lijst (efficiënte manier) te maken.
Antwoord 6
Hoe voeg ik een getal toe in het Drug_Dictionary?
Wilt u “A NUMBER” of een reeks waarden toevoegen?
Ik gebruik woordenboeken om associatieve arrays en opzoektabellen nogal een beetje te bouwen.
Omdat Python zo goed is in het verwerken van snaren,
Ik gebruik vaak een tekenreeks en voeg de waarden toe in een dict als een door komma’s gescheiden string
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)
Met de Append-methode kan een lijst met waarden worden opgeslagen, maar blijft er een komma achter
die je kunt verwijderen met
drug_dictionary[drug_to_update][:-1]
het resultaat van het toevoegen van de waarden als een tekenreeks betekent dat u ook zoeklijsten kunt toevoegen als dat nodig is en
print "'%s':'%s'" % ( drug_to_update, drug_dictionary[drug_to_update])
kan terugkeren
'MORPHINE':'10,5,7,42,12,'
Antwoord 7
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)
Antwoord 8
U kunt ook de methode update()
gebruiken
d = {"a": 2}
d.update{"b": 4}
print(d) # {"a": 2, "b": 4}