Ik probeer een Python-woordenboek om te zetten in een Python-lijst om wat berekeningen uit te voeren.
#My dictionary
dict = {}
dict['Capital']="London"
dict['Food']="Fish&Chips"
dict['2012']="Olympics"
#lists
temp = []
dictList = []
#My attempt:
for key, value in dict.iteritems():
aKey = key
aValue = value
temp.append(aKey)
temp.append(aValue)
dictList.append(temp)
aKey = ""
aValue = ""
Dat is mijn poging… maar ik kom er niet uit wat er aan de hand is?
Antwoord 1, autoriteit 100%
Uw probleem is dat u key
en value
tussen aanhalingstekens hebt, waardoor ze strings worden, dwz u stelt aKey
in om de string "key"
en niet de waarde van de variabele key
. Bovendien leeg je de temp
lijst niet, dus je voegt er elke keer iets aan toe, in plaats van dat er slechts twee items in staan.
Probeer iets als:
. om je code te corrigeren
for key, value in dict.iteritems():
temp = [key,value]
dictlist.append(temp)
Je hoeft de lusvariabelen key
en value
niet naar een andere variabele te kopiëren voordat je ze gebruikt, dus heb ik ze weggelaten. Evenzo hoeft u append niet te gebruiken om een lijst op te bouwen, u kunt deze gewoon tussen vierkante haken specificeren, zoals hierboven weergegeven. En we hadden dictlist.append([key,value])
kunnen doen als we zo kort mogelijk wilden zijn.
Of gebruik gewoon dict.items()
zoals is gesuggereerd.
Antwoord 2, autoriteit 90%
dict.items()
Is de truc.
Antwoord 3, autoriteit 92%
Converteren van dict naar lijst is gemakkelijk gemaakt in Python. Drie voorbeelden:
>> d = {'a': 'Arthur', 'b': 'Belling'}
>> d.items()
[('a', 'Arthur'), ('b', 'Belling')]
>> d.keys()
['a', 'b']
>> d.values()
['Arthur', 'Belling']
Antwoord 4, autoriteit 39%
U moet dict.items()
gebruiken.
Hier is een one-liner oplossing voor uw probleem:
[(k,v) for k,v in dict.items()]
en resultaat:
[('Food', 'Fish&Chips'), ('2012', 'Olympics'), ('Capital', 'London')]
of je kunt het doen
l=[]
[l.extend([k,v]) for k,v in dict.items()]
voor:
['Food', 'Fish&Chips', '2012', 'Olympics', 'Capital', 'London']
Antwoord 5, autoriteit 24%
>>> a = {'foo': 'bar', 'baz': 'quux', 'hello': 'world'}
>>> list(reduce(lambda x, y: x + y, a.items()))
['foo', 'bar', 'baz', 'quux', 'hello', 'world']
Om uit te leggen: a.items() geeft een lijst met tuples terug. Als je twee tupels bij elkaar optelt, krijg je één tuple die alle elementen bevat. Dus de reductie creëert één tuple met alle sleutels en waarden en dan maakt de lijst(…) daar een lijst van.
Antwoord 6, autoriteit 16%
Waarschijnlijk wil je dit gewoon:
dictList = dict.items()
Uw aanpak heeft twee problemen. Ten eerste gebruik je key
en value
tussen aanhalingstekens, dit zijn strings met de letters “key” en “value”, niet gerelateerd aan de variabelen van die namen. Ook blijf je elementen toevoegen aan de “tijdelijke” lijst en verwijder nooit oude elementen die er al in staan uit eerdere iteraties. Zorg ervoor dat je een nieuwe en lege temp
lijst hebt in elke iteratie en gebruik de key
en value
variabelen:
for key, value in dict.iteritems():
temp = []
aKey = key
aValue = value
temp.append(aKey)
temp.append(aValue)
dictList.append(temp)
Houd er rekening mee dat dit korter geschreven zou kunnen worden zonder de tijdelijke variabelen (en in Python 3 met items()
in plaats van iteritems()
):
for key, value in dict.items():
dictList.append([key, value])
Antwoord 7, autoriteit 3%
Als je een woordenboek aan het maken bent om alleen een lijst met tuples te maken, aangezien het maken van dictaten zoals jij misschien lastig kan zijn, je zou kunnen overwegen om zip() te gebruiken
Het is vooral handig als je één kop en meerdere rijen hebt. Als ik er bijvoorbeeld van uitga dat je Olympische Spelen-statistieken voor landen wilt:
headers = ['Capital', 'Food', 'Year']
countries = [
['London', 'Fish & Chips', '2012'],
['Beijing', 'Noodles', '2008'],
]
for olympics in countries:
print zip(headers, olympics)
geeft
[('Capital', 'London'), ('Food', 'Fish & Chips'), ('Year', '2012')]
[('Capital', 'Beijing'), ('Food', 'Noodles'), ('Year', '2008')]
Ik weet niet of dat het einddoel is, en ik ga off-topic, maar het kan iets zijn om in gedachten te houden.