enumerate() voor woordenboek in python

Ik weet dat we enumerategebruiken om een lijst te herhalen, maar ik heb het in een woordenboek geprobeerd en het gaf geen foutmelding.

CODE:

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, j in enumerate(enumm):
    print(i, j)

UITGANG:

0 0
1 1
2 2
3 4
4 5
5 6
6 7

Kan iemand de uitvoer uitleggen?


Antwoord 1, autoriteit 100%

Bovenop de reeds gegeven antwoorden is er een heel mooi patroon in Python waarmee je zowel sleutels als waarden van een woordenboek kunt opsommen.

Het normale geval dat u de sleutels opsomtvan het woordenboek:

example_dict = {1:'a', 2:'b', 3:'c', 4:'d'}
for i, k in enumerate(example_dict):
    print(i, k)

Welke uitgangen:

0 1
1 2
2 3
3 4

Maar als u zowel wilt opsommen met sleutels als met waarden, dan is dit de manier:

for i, (k, v) in enumerate(example_dict.items()):
    print(i, k, v)

Welke uitgangen:

0 1 a
1 2 b
2 3 c
3 4 d

Antwoord 2, autoriteit 46%

De eerste kolom met uitvoer is de index van elk item in enummen de tweede zijn de sleutels. Als je je woordenboek wilt herhalen, gebruik dan .items():

for k, v in enumm.items():
    print(k, v)

En de uitvoer zou er als volgt uit moeten zien:

0 1
1 2
2 3
4 4 
5 5
6 6
7 7

Antwoord 3, autoriteit 30%

Ik dacht ik voeg eraan toe dat als je de index, sleutel en waarden van een woordenboek wilt opsommen, je for-lus er als volgt uit zou moeten zien:

for index, (key, value) in enumerate(your_dict.items()):
    print(index, key, value)

Antwoord 4, autoriteit 22%

dict1={'a':1, 'b':'banana'}

Om het woordenboek in Python 2.x weer te geven:

for k,v in dict1.iteritems():
        print k,v 

Gebruik in Python 3.x:

for k,v in dict1.items():
        print(k,v)
# a 1
# b banana

Ten slotte, zoals anderen al hebben aangegeven, als u een lopende index wilt, kunt u die ook hebben:

for i  in enumerate(dict1.items()):
   print(i)  
 # (0, ('a', 1))
 # (1, ('b', 'banana'))

Maar dit gaat voorbij aan het doel van een woordenboek (kaart, associatieve array), wat een efficiënte gegevensstructuur voor opzoeken in telefoonboekstijl. De volgorde van woordenboeken kan bijkomstig zijn voor de implementatie en er mag niet op worden vertrouwd. Als je de bestelling nodig hebt, gebruik dan OrderedDict .


Antwoord 5, autoriteit 3%

Omdat je enumerategebruikt, is je ieigenlijk de index van de sleutel in plaats van de sleutel zelf.

Dus u krijgt 3in de eerste kolom van de rij 3 4, ook al is er geen sleutel 3.

enumerateitereert via een gegevensstructuur (BE IT-lijst of een woordenboek) terwijl u ook het huidige iteratienummer verstrekt.

Vandaar, de kolommen hier zijn het iteratienummer gevolgd door de sleutel in woordenboek enum

Overige oplossingen hebben al getoond hoe te itereren over sleutel en waardepaar, zodat ik niet hetzelfde in de mijne zal herhalen.


Antwoord 6, autoriteit 2%

Dat moet zeker verwarrend lijken. Dit is dus wat er aan de hand is. De eerste waarde van enumerate (in dit geval i) retourneert de volgende indexwaarde beginnend bij 0 dus 0, 1, 2, 3, … Het zal altijd deze getallen retourneren, ongeacht wat er in het woordenboek staat. De tweede waarde van enumerate (in dit geval j) retourneert de waarden in je woordenboek/enumm (we noemen het een woordenboek in Python). Wat je echt wilt doen, is waarmee roadrunner66 reageerde.


Antwoord 7, autoriteit 2%

  1. Itereren over een Python-dictaat betekent itereren over zijn sleutels op precies dezelfde manier als met dict.keys()
  2. De volgorde van de toetsen wordt bepaald door de implementatiecode en je kunt geen specifieke volgorde verwachten:

    Sleutels en waarden worden herhaald in een willekeurige volgorde, namelijk:
    niet-willekeurig, varieert tussen Python-implementaties en is afhankelijk van de
    de geschiedenis van invoegingen en verwijderingen in het woordenboek. Als sleutels, waarden en
    itemweergaven worden herhaald zonder tussenliggende wijzigingen aan de
    woordenboek, komt de volgorde van de items direct overeen.

Daarom zie je in de eerste kolom de indices 0 t/m 7. Ze worden geproduceerd door enumerateen staan altijd in de juiste volgorde. Verder zie je in de tweede kolom de toetsen 0 t/m 7 van het dictaat. Ze zijn niet gesorteerd.


Antwoord 8, autoriteit 2%

Python3:

Eén oplossing:

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, k in enumerate(enumm):
    print("{}) d.key={}, d.value={}".format(i, k, enumm[k]))

Output:
0) enumm.key=0, enumm.value=1
1) enumm.key=1, enumm.value=2
2) enumm.key=2, enumm.value=3
3) enumm.key=4, enumm.value=4
4) enumm.key=5, enumm.value=5
5) enumm.key=6, enumm.value=6
6) enumm.key=7, enumm.value=7

Een ander voorbeeld:

d = {1 : {'a': 1, 'b' : 2, 'c' : 3},
     2 : {'a': 10, 'b' : 20, 'c' : 30}
    }    
for i, k in enumerate(d):
        print("{}) key={}, value={}".format(i, k, d[k])

Output:    
    0) key=1, value={'a': 1, 'b': 2, 'c': 3}
    1) key=2, value={'a': 10, 'b': 20, 'c': 30}

Antwoord 9

Misschien vindt u het handig om de index in de sleutel op te nemen:

d = {'a': 1, 'b': 2}
d = {(i, k): v for i, (k, v) in enumerate(d.items())}

Uitvoer:

{(0, 'a'): True, (1, 'b'): False}

Antwoord 10

d = {0: 'zero', '0': 'ZERO', 1: 'one', '1': 'ONE'}
print("List of enumerated d= ", list(enumerate(d.items())))

uitvoer:

List of enumerated d=  [(0, (0, 'zero')), (1, ('0', 'ZERO')), (2, (1, 'one')), (3, ('1', 'ONE'))]

Other episodes