Hoe woordenboeksleutels als een lijst in Python te krijgen

Aliaksei Yursha 30 januari 2023 20 december 2019
  1. dict.keys() om Python woordenboeksleutels te krijgen
  2. Lussen om Python-woordenboeksleutels te krijgen
  3. Maak een lijst van begrippen om de sleutels van het Python Dictionary te krijgen
  4. Python woordenboek uitpakken * operator om de sleutels te krijgen
  5. Looptijdprestaties vergelijken
Hoe woordenboeksleutels als een lijst in Python te krijgen

Het bekijken van woordenboeksleutels als een reeks is een alledaags gebruik in Python-programmering.

Er zijn verschillende benaderingen om dit te bereiken, elk met verschillende prestatiekenmerken.

dict.keys() om Python woordenboeksleutels te krijgen

De dict.keys() functie keert terug dict_keys - een overzichtelijke weergave van de toetsen in het woordenboek.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> state_capitals.keys()
dict_keys(['California', 'Pennsylvania', 'Texas'])

Je kan dict_keys rechtstreeks overgaan zonder het in een lijst om te zetten. Voor veel gebruiksscenario’s dict_keys kan het worden verwijderd in plaats van een lijst in API’s, en het werkt.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> for state in state_capitals.keys():
...   print(state)
...
California
Pennsylvania
Texas

Als u strikt aan woordenboekwoorden moet werken, zoals in lijsten, als u bijvoorbeeld een index wilt kunnen gebruiken om een ​​bepaalde sleutel uit de reeks te lezen, moet u deze dict_keys eerst in een lijst converteren.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> list(state_capitals.keys())
['California', 'Pennsylvania', 'Texas']

Merk op dat bellen dict.keys() optioneel is als u sleutels als een lijst wilt ontvangen. Omdat Python-woordenboeken over hun sleutels kunnen worden herhaald, kan je een woordenboek zelf doorgeven aan een lijstconstructeur.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> list(state_capitals)
['California', 'Pennsylvania', 'Texas']

Lussen om Python-woordenboeksleutels te krijgen

Een eigenaardige eigenschap van woordenboeken in Python is dat wanneer u ze herhaalt, u hun sleutels herhaalt. Zo kan je alle woordenboeksleutels eenvoudig verzamelen door erover te itereren.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = []
>>> for key im state_capitals:
...   keys.append(key)
...
>>> keys
['California', 'Pennsylvania', 'Texas']

Maak een lijst van begrippen om de sleutels van het Python Dictionary te krijgen

Een syntactische verbetering ten opzichte van het gebruik van lussen kan het gebruik van Pythons lijstbegrippen zijn . Met lijstbegrippen kan je de bovenstaande lus in één lijn samenvoegen.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = [key for key in state_capitals]
>>> keys
['California', 'Pennsylvania', 'Texas']

Python woordenboek uitpakken * operator om de sleutels te krijgen

Vanaf Python 3.5 kunnen we de operator voor uitpakken * gebruiken om woordenboeksleutels te behouden. Deze functie werd geïntroduceerd met PEP 448 - Aanvullende uitpakveralgemeningen.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = [*state_capitals]
>>> keys
['California', 'Pennsylvania', 'Texas']

Het voordeel van deze aanpak is dat u uw woordenboeksleutels kan jeitpakken in andere collecties buiten lijsten, zoals tupels of sets.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys_tuple = *state_capitals,
>>> keys_tuple
('California', 'Pennsylvania', 'Texas')
>>> keys_set = {*state_capitals}
>>> keys_set
{'California', 'Pennsylvania', 'Texas'}

Looptijdprestaties vergelijken

De runtime-prestaties van elk van de bovenstaande benaderingen variëren.

>>> from timeit import timeit
>>> timeit("list(state_capitals.keys())", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.25394885599962436
>>> timeit("list(state_capitals)", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.17995373999929143
>>> timeit("for key in state_capitals: keys.append(key)", setup="keys = []; state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.25294865500018204
>>> timeit("[key for key in state_capitals]", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.2447525150000729
>>> timeit("[*state_capitals]", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.0962776809992647

Zoals uit de bovenstaande tijdstippen volgt, is de * operator voor het uitpakken het snelst.

Geef er de voorkeur aan, tenzij u een goede reden hebt om terug te vallen op een van de andere benaderingen.

Gerelateerde Artikelen - Python Dictionary