Hoe indexeren in een woordenboek?

Ik heb hieronder een woordenboek:

colors = {
    "blue" : "5",
    "red" : "6",
    "yellow" : "8",
}

Hoe index ik het eerste item in het woordenboek?

colors[0]retourneert een KeyErrorom voor de hand liggende redenen.


Antwoord 1, Autoriteit 100%

Woordenboeken zijn ongeordend in Python-versies tot en met Python 3.6. Als u niet geeft om de volgorde van de vermeldingen en wilt u hoe dan ook toegang krijgen tot de sleutels of waarden per index, kunt u een lijst met toetsen maken voor een woordenboek dmet keys = list(d), en vervolgens toegang tot toetsen in de lijst per index keys[i], en de bijbehorende waarden met d[keys[i]].

Als u het doet om de volgorde van de inzendingen, kunt u beginnen met Python 2.7 U kunt collections.OrderedDict. Of gebruik een lijst met paren

l = [("blue", "5"), ("red", "6"), ("yellow", "8")]

Als u geen toegang nodig hebt per sleutel. (Waarom snaren uw cijfers trouwens?)

in Python 3.7, Normale woordenboeken worden besteld, dus u hoeft niet OrderedDictmeer te gebruiken (maar u kunt nog steeds – het is in feite hetzelfde type). De CPYTHON-implementatie van Python 3.6 bevatte al die verandering, maar omdat het geen deel uitmaakt van de taalspecificatie, kunt u er niet op vertrouwen in Python 3.6.


Antwoord 2, Autoriteit 109%

Als iemand nog steeds naar deze vraag kijkt, is het momenteel geaccepteerde antwoord nu verouderd:

Sinds Python 3.7* zijn woordenboeken orderbehoudend , dat wil zeggen dat ze zich nu gedragen als collections.OrderedDicts. Helaas is er nog steeds geen speciale methode om te indexeren in keys()/ values()van het woordenboek, dus het verkrijgen van de eerste sleutel / waarde in het woordenboek kan worden gedaan als

first_key = list(colors)[0]
first_val = list(colors.values())[0]

of anders (dit vermijdt het instantiëren van de sleutelweergave in een lijst):

def get_first_key(dictionary):
    for key in dictionary:
        return key
    raise IndexError
first_key = get_first_key(colors)
first_val = colors[first_key]

Als je een n-de sleutel nodig hebt, doe dan op dezelfde manier

def get_nth_key(dictionary, n=0):
    if n < 0:
        n += len(dictionary)
    for i, key in enumerate(dictionary.keys()):
        if i == n:
            return key
    raise IndexError("dictionary index out of range") 

* CPython 3.6 bevatte al invoegopdrachten, maar dit was slechts een implementatiedetail. De taalspecificatie omvat invoegopdrachten vanaf 3.7.


Antwoord 3, autoriteit 2%

Als je een geordend woordenboek nodig hebt, kun je odictgebruiken.


Antwoord 4, autoriteit 2%

Een element van een woordenboek behandelen is als op een ezel zitten en genieten van de rit.

Als regel van Python is een WOORDENBOEK ordelijk

Als er is

dic = {1: "a", 2: "aa", 3: "aaa"}

Stel nu dat als ik ga zoals dic[10] = "b", het niet altijd zo zal worden toegevoegd

dic = {1:"a",2:"aa",3:"aaa",10:"b"}

Het kan zijn als

dic = {1: "a", 2: "aa", 3: "aaa", 10: "b"}

Of

dic = {1: "a", 2: "aa", 10: "b", 3: "aaa"}

Of

dic = {1: "a", 10: "b", 2: "aa", 3: "aaa"}

Of een dergelijke combinatie.

Dus een vuistregel is dat een WOORDENBOEKloosis!


Antwoord 5, autoriteit 2%

Ik heb eigenlijk een nieuwe oplossing gevonden die me echt heeft geholpen. Als je je vooral zorgen maakt over de index van een bepaalde waarde in een lijst of dataset, kun je de waarde van het woordenboek gewoon op die Index instellen!:

Kijk maar:

list = ['a', 'b', 'c']
dictionary = {}
counter = 0
for i in list:
   dictionary[i] = counter
   counter += 1
print(dictionary) # dictionary = {'a':0, 'b':1, 'c':2}

Dankzij de kracht van hashmaps kunt u uw invoer in een constante tijd indexeren (ook wel een stuk sneller genoemd)


Antwoord 6

oh, dat is een moeilijke. Wat je hier hebt, zijn in feite twee waarden voor elk item. Dan probeer je ze te bellen met een nummer als sleutel. Helaas is een van uw waarden al ingesteld als de sleutel!

Probeer dit:

colors = {1: ["blue", "5"], 2: ["red", "6"], 3: ["yellow", "8"]}

Nu kunt u de toetsen op nummer bellen alsof ze zijn geïndexeerd als een lijst. U kunt ook verwijzen naar de kleur en het nummer op hun positie in de lijst.

Bijvoorbeeld

colors[1][0]
// returns 'blue'
colors[3][1]
// returns '8'

Natuurlijk moet je een andere manier bedenken om bij te houden op welke locatie elke kleur zich bevindt. Misschien kun je een ander woordenboek hebben waarin de sleutel van elke kleur wordt opgeslagen als zijn waarde.

colors_key = {‘blue’: 1, ‘red’: 6, ‘yllow’: 8}

Dan kunt u indien nodig ook de kleursleutel opzoeken.

colors[colors_key[‘blue’]][0] geeft ‘blue’ terug

Zoiets.

En als je toch bezig bent, kun je een dictaat maken met de getalwaarden als sleutels, zodat je ze altijd kunt gebruiken om je kleuren op te zoeken, weet je, als je dat nodig hebt.

waarden = {5: [1, ‘blauw’], 6: [2, ‘rood’], 8: [3, ‘geel’]}

Vervolgens (colors[colors_key[values[5][1]]][0]) wordt ‘blauw’ geretourneerd.

Of je kunt een lijst met lijsten gebruiken.

Veel succes!


Antwoord 7

Dat kan niet, aangezien dictongeordend is. je kunt .popitem()gebruiken om een willekeurig item te krijgen, maar dat zal het uit het dictaat verwijderen.

Other episodes