Als een mydict
niet leeg is, benader ik een willekeurig element als:
mydict[mydict.keys()[0]]
Is er een betere manier om dit te doen?
Op Python 3, niet-destructief en iteratief:
next(iter(mydict.values()))
Op Python 2, niet-destructief en iteratief:
mydict.itervalues().next()
Als je wilt dat het in zowel Python 2 als 3 werkt, kun je het six
pakket gebruiken:
six.next(six.itervalues(mydict))
hoewel het op dit punt nogal cryptisch is en ik'liever jouw code zie.
Als je een item wilt verwijderen, doe dat dan:
key, value = mydict.popitem()
Merk op dat "first" hier geen geschikte term is. Dit is "any" item, omdat dict
geen geordend type is.
Zoals anderen al zeiden, er is geen "first item", omdat woordenboeken geen gegarandeerde volgorde hebben (ze'zijn geïmplementeerd als hashtabellen). Als u, bijvoorbeeld, de waarde wilt die overeenkomt met de kleinste sleutel, thedict[min(thedict)]
zal dat doen. Als je geeft om de volgorde waarin de sleutels zijn ingevoegd, dat wil zeggen, met "first" bedoel je "inserted earliest", dan kun je in Python 3.1 collections.OrderedDict gebruiken, die ook in de aankomende Python 2.7 zit; voor oudere versies van Python, download, installeer, en gebruik de ordered dict backport (2.4 en later) die je kunt vinden hier.
Python 3.7 Nu dicts zijn geordend door invoeging.
Als we de problemen met de dicteer volgorde negeren, is dit misschien beter:
next(dict.itervalues())
Op deze manier vermijden we item lookup en het genereren van een lijst met sleutels die we niet'gebruiken.
next(iter(dict.values()))