Dostop do poljubnega elementa v slovarju v Pythonu

Če mydict ni prazen, dostopam do poljubnega elementa kot:

mydict[mydict.keys()[0]]

Ali obstaja kakšen boljši način za to?

Rešitev

V Pythonu 3 nedestruktivno in iterativno:

next(iter(mydict.values()))

V Pythonu 2, nedestruktivno in iterativno:

mydict.itervalues().next()

Če želite, da deluje v Pythonu 2 in 3, lahko uporabite paket six:

six.next(six.itervalues(mydict))

čeprav je na tej točki precej skrivnosten in bi raje videl vašo kodo.

Če želite odstraniti kateri koli element, to storite:

key, value = mydict.popitem()

Upoštevajte, da izraz "prvi" tukaj ni primeren. To je "katerikoli" element, ker dict ni urejen tip.

Komentarji (12)

Kot so omenili drugi, ni "prvega elementa", saj slovarji nimajo zagotovljenega vrstnega reda (implementirani so kot hash tabele). Če želite na primer vrednost, ki ustreza najmanjšemu ključu, bo to storil thedict[min(thedict)]. Če vas zanima vrstni red, v katerem so bili ključi vstavljeni, tj. če s "prvi" mislite "vstavljeni najprej", potem lahko v Pythonu 3.1 uporabite collections.OrderedDict, ki je tudi v prihajajočem Pythonu 2.7; za starejše različice Pythona prenesite, namestite in uporabite backport ordered dict (2.4 in novejše), ki ga lahko najdete tukaj.

Python 3.7 Zdaj Dikti so urejeni z vstavljanjem.

Komentarji (0)

Če ne upoštevamo vprašanj v zvezi z naročanjem diktatov, bi bilo to morda bolje:

next(dict.itervalues())

Tako se izognemo iskanju elementov in ustvarjanju seznama ključev, ki jih ne uporabljamo.

Python3

next(iter(dict.values()))
Komentarji (3)