it-swarm.com.de

Wie kann man ein Wörterbuch indexieren?

Ich habe ein Wörterbuch unten:

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

Wie indexiere ich den ersten Eintrag im Wörterbuch?

colors[0] gibt aus offensichtlichen Gründen eine KeyError zurück.

60
Harpal

Wörterbücher sind in Python-Versionen bis einschließlich Python 3.6 ungeordnet. Wenn Sie sich nicht um die Reihenfolge der Einträge kümmern und die Schlüssel oder Werte trotzdem über den Index aufrufen möchten, können Sie d.keys()[i] und d.values()[i] oder d.items()[i] verwenden. (Beachten Sie, dass diese Methoden eine Liste aller Schlüssel, Werte oder Elemente in Python 2.x erstellen. Wenn Sie sie mehr als einmal benötigen, speichern Sie die Liste zur Verbesserung der Leistung in einer Variablen.)

Wenn Sie sich um die Reihenfolge der Einträge kümmern, können Sie ab Python 2.7 collections.OrderedDict verwenden. Oder verwenden Sie eine Liste von Paaren

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

wenn Sie keinen Schlüsselzugriff benötigen. (Warum sind Ihre Zahlen Zeichenketten übrigens?)

In Python 3.7 werden normale Wörterbücher geordnet, sodass Sie OrderedDict nicht mehr verwenden müssen (aber Sie können es immer noch - es ist im Grunde derselbe Typ). Die CPython-Implementierung von Python 3.6 enthielt diese Änderung bereits. Da sie jedoch nicht Teil der Sprachspezifikation ist, können Sie sich in Python 3.6 nicht darauf verlassen.

79
Sven Marnach

Wenn sich noch jemand diese Frage ansieht, ist die derzeit akzeptierte Antwort veraltet:

Seit Python 3.6 sind die Wörterbücher order-preserving , dh sie verhalten sich jetzt genau wie collections.OrderedDicts. Leider gibt es immer noch keine dedizierte Methode für die Indexierung in keys()/values() des Wörterbuchs, sodass der erste Schlüssel/Wert im Wörterbuch als gefunden werden kann

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

oder alternativ (dies vermeidet das Instantiieren der Tastenansicht in einer Liste):

def get_first_key(dictionary):
    for key in dictionary.keys():
        return key

first_key = get_first_key(colors)
first_val = colors[first_key]

Wenn Sie eine n- te Taste benötigen, dann ähnlich

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") 
49
Pasha

ich habe tatsächlich eine neuartige Lösung gefunden, die mir wirklich geholfen hat. Wenn Sie besonders mit dem Index eines bestimmten Wertes in einer Liste oder einem Datensatz befasst sind, können Sie den Wert des Wörterbuchs auf diesen Index setzen!

Schau nur:

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}

Jetzt können Sie mit Hilfe von Hashmaps die Einträge in konstanter Zeit (auch viel schneller) erstellen.

4
user3368835

Ein Wörterbuch anzusprechen ist wie auf einem Esel zu sitzen und die Fahrt zu genießen.

In der Regel ist PythonDICTIONARY

Wenn da ist

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

Angenommen, ich gehe wie dic[10] = "b", dann wird es nicht immer so hinzugefügt

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

Es mag sein wie

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

Oder

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

Oder

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

Oder eine solche Kombination.

Die Daumenregel ist alsoDICTIONARYis orderless !

4
Raj Damani

Wenn Sie ein geordnetes Wörterbuch benötigen, können Sie odict verwenden.

3
Utku Zihnioglu

Das ist nicht möglich, da dict nicht geordnet ist. Sie können .popitem() verwenden, um ein beliebiges Element zu erhalten.

import collections 

# Declaring namedtuple() 
dimensions = collections.namedtuple('colors',['blue','red','yellow']) 
S = dimensions('5','6','8')
# Access using index 
print ("The dimension of red using index is : ",end ="") 
print (S[1]) 
# Access using name  
print ("The dimension of red using keyname is : ",end ="") 
print (S.red) 
# Access using getattr() 
print ("The dimension of red  using getattr() is : ",end ="") 
print (getattr(S,'red')) 
1
user1464878

oh, das ist eine schwierige Frage. Grundsätzlich haben Sie hier zwei Werte für jeden Artikel. Dann versuchen Sie, sie mit einer Nummer als Schlüssel anzurufen. Leider ist einer Ihrer Werte bereits als Schlüssel festgelegt!

Versuche dies:

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

Jetzt können Sie die Tasten nach Nummer anrufen, als wären sie wie eine Liste indiziert. Sie können Farbe und Nummer auch anhand ihrer Position innerhalb der Liste referenzieren.

Zum Beispiel,

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

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

Natürlich müssen Sie einen anderen Weg finden, um zu verfolgen, an welcher Position sich jede Farbe befindet. Vielleicht können Sie ein anderes Wörterbuch verwenden, in dem der Schlüssel jeder Farbe als Wert gespeichert wird.

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

Dann können Sie bei Bedarf auch den Farbschlüssel nachschlagen.

colors [colors_key ['blue']] [0] gibt 'blue' zurück

Sowas in der Art.

Und wenn Sie gerade dabei sind, können Sie ein Diktat mit den Zahlenwerten als Schlüssel festlegen, so dass Sie sie jederzeit zum Nachschlagen Ihrer Farben verwenden können, wenn Sie möchten.

werte = {5: [1, 'blau'], 6: [2, 'rot'], 8: [3, 'gelb']}

Dann wird (colors [colors_key [Werte [5] [1]]] [0]) 'blau' zurückgeben.

Oder Sie können eine Liste mit Listen verwenden.

Viel Glück!

1
Godfreyluck

Wörterbücher sind keine Listen.

mit Listen können Sie einfach enter foo[0] here, um diesen Wert zu erhalten.

diktiere haben Funktionen .value und .keys ().

Es ist auch empfehlenswert, try/zu verwenden, wenn Sie ein Diktat durchlaufen.

0
RichieKing

Da die Datenstruktur des Wörterbuchs nicht geordnet ist, können Sie den ersten Eintrag des Wörterbuchs nicht indizieren, während wir die Werte innerhalb des Wörterbuchs indizieren können. 

new_dict= {'first': 'Meghshyam', 'second': 'Sonar', 'third': '1993'}

# oben ist das Wörterbuch drei Werte.

#folgender Code schreibt den ersten Wert des Wörterbuchs mithilfe des Schlüssels

new_dict['first'][0]

# Wir indizieren nur den ersten Buchstaben des Werts mit dem entsprechenden Schlüssel. 

Hoffe das klar das Konzept. 

0
Meghshyam Sonar