dictionaries index in range? (python)

Moderators: jkien, Xilvo

Gebruikersavatar
Berichten: 343

Re: dictionaries index in range? (python)

sb30 schreef: ma 03 jan 2022, 09:48 het is de oorspronkelijke opgave ik heb er niets aan gedaan
Ok, dus dit deel staat in de opgave? :shock: :

Code: Selecteer alles

woordenboek={1: "Dagelijkse kost,", 2:"Het scheldepeleton,", 3: "Familie", 4: "Scheire en de schepping"}
for i in range(1,4):
    print(woordenboek[i])
print("worden uitgezonden op verschillende zenders.")
Dan zou ik een andere bron kiezen om Python van te leren... Dat kan je waarschijnlijk niet helaas, maar dit is niet alleen slecht geprogrammeerd, het leert je ook verkeerde ideeën aan. Een dictionary heeft geen intrinsieke volgorde zoals een list dat wel heeft, zo is de datastructuur nl. niet bedoeld. Het wordt geïmplementeerd met een hash-table en het doel daarvan is voornamelijk om een value snel te kunnen vinden voor een gegeven key. Als je een item in een list wil vinden (en je weet dus niet welk element nummer het heeft) moet je van voor beginnen en zo de hele lijst door. Dat is het fundamentele verschil met een dictionary, daar maak je van de key een hash waarmee je bijna direct de value kan vinden, zonder door de hele lijst te hoeven.

Het heeft dus niet zoveel zin om van een volgorde te spreken in een dictionary, maar in de input van deze opgave wordt een woordenboek gemaakt als soort van list met als keys het item nummer, als dat je doel is kan je toch echt beter gewoon een list gebruiken, dan hoef je iig zelf niet de keys '1', '2' etc. toe te voegen. Bovendien, bedenk eens wat je moet doen als je een item 3 wilt toevoegen en de rest naar achter door wilt schuiven, dan moet je alle keys aanpassen!

Een heel veel betere manier om alle values van een dictionary te printen is dit (ik negeer even dat de woordenboek zoals je die hier gebruikt eigenlijk heel onhandig is):

Code: Selecteer alles

woordenboek={1: "Dagelijkse kost,", 2:"Het scheldepeleton,", 3: "Familie", 4: "Scheire en de schepping"}
for s in woordenboek.values():
    print(s)
print("worden uitgezonden op verschillende zenders.")
Laatst gewijzigd door irArjan op ma 03 jan 2022, 14:42, 2 keer totaal gewijzigd.

Gebruikersavatar
Berichten: 343

Re: dictionaries index in range? (python)

Dus, eigenlijk is nog veel beter:

Code: Selecteer alles

woordenboek= ["Dagelijkse kost,", "Het scheldepeleton,", "Familie", "Scheire en de schepping"]
for s in woordenboek:
    print(s)
print("worden uitgezonden op verschillende zenders.")
Laatst gewijzigd door irArjan op ma 03 jan 2022, 14:41, 1 keer totaal gewijzigd.

Gebruikersavatar
Moderator
Berichten: 9.986

Re: dictionaries index in range? (python)

irArjan schreef: ma 03 jan 2022, 14:36 Dus, eigenlijk is nog veel beter:

Code: Selecteer alles

woordenboek= ["Dagelijkse kost,", "Het scheldepeleton,", "Familie", "Scheire en de schepping"]
for str in woordenboek:
    print(str)
print("worden uitgezonden op verschillende zenders.")
Helemaal eens met wat je hierboven schreef. Een rare manier om een dictionary te gebruiken.
Maar "str" is hier een onhandige naam. Het is een python keyword.

Gebruikersavatar
Berichten: 343

Re: dictionaries index in range? (python)

Whoopsy.... je hebt helemaal gelijk!

Aangepast... 😇

Gebruikersavatar
Berichten: 1.605

Re: dictionaries index in range? (python)

OOOVincentOOO schreef: ma 03 jan 2022, 09:44 Waarom gebruik je?

Code: Selecteer alles

range(1,4)
Waar heb je dat (aan)geleerd in deze situatie en waarom? Wat is de oorspronkelijke opgave? Het lijkt op jouw eigen code bedenksel.

nb. meestal loopt een counter van 0 tot 3 bijvoorbeeld.

EDIT:
Die 1 t/m 4 in jouw range heeft niets te maken met de dict.
Wat ga je doen als jouw dict 125 elementen heeft? De range aanpassen? Hoe wil je dat doen? Alle elemeten tellen?
Volgens mij heb ik hetzelde al vermeld. Zie ook andere berichten. Maar iets dubbel vermelden of aanhalen is niet verkeerd.

Of maak ik blunders?

Gebruikersavatar
Berichten: 343

Re: dictionaries index in range? (python)

@OOOVincentOOO

Het is niet mijn bedoeling je te verbeteren oid, maar om aan te vullen. Ik vond met name dat nog niet duidelijk genoeg benoemd was dat dictionaries niet bedoeld zijn waarvoor en op de wijze ze in die opgave staan. Je noemt dat idd, maar ik vind het een fundamenteel punt. Ook moet je mijns inziens überhaupt geen range gebruiken in dit geval (als je een counter nodig hebt, gebruik dan enumerate).

Technicus
Berichten: 1.166

Re: dictionaries index in range? (python)

Als je over een dictionary wilt loopen, dan is het het handigste om gebruik te maken van:

Code: Selecteer alles

for key, value in dict.iteritems():
    print(f” onder sleutel {key} staat: {value}”)
    

Reageer