Woordenboek converteren naar lijst?

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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes