Wie kann ich den Wörterbuchschlüssel als Variable direkt in Python abrufen (nicht durch Suchen nach Wert)?


189

Entschuldigen Sie diese grundlegende Frage, aber meine Suche in dieser Frage zeigt nichts anderes als das Erhalten des Schlüssels eines Wörterbuchs basierend auf seinem Wert, den ich lieber nicht verwenden würde, da ich einfach den Text / Namen des Schlüssels möchte und mir Sorgen um diese Suche mache Der Wert kann dazu führen, dass 2 oder mehr Schlüssel zurückgegeben werden, wenn das Wörterbuch viele Einträge enthält. Ich versuche Folgendes:

mydictionary={'keyname':'somevalue'}
for current in mydictionary:

   result = mydictionary.(some_function_to_get_key_name)[current]
   print result
   "keyname"

Der Grund dafür ist, dass ich diese in ein Dokument drucke und dabei den Schlüsselnamen und den Wert verwenden möchte

Ich habe die folgende Methode gesehen, aber dies scheint nur den Wert des Schlüssels zurückzugeben

get(key[, default])

Möchten Sie nur überprüfen, ob der Keyname im Wörterbuch vorhanden ist? Weil Sie tun es bereits.
Relet

1
Nein, wie gesagt, ich muss es ausdrucken, es würde eine große Anzahl von Schlüsseln durchlaufen
Rick

currentist der aktuelle Schlüssel, tun Sie es einfachprint current
Moberg

4
Wie würden Sie nur den ersten Schlüssel im Wörterbuch erhalten? (keine Iteration)
VISQL

Antworten:


238

Sie sollten über Schlüssel iterieren mit:

for key in mydictionary:
   print "key: %s , value: %s" % (key, mydictionary[key])

10
Sie können einfach schreibenfor key in mydictionary:
blokeley

7
in Python 3.6:print (f"key: {key}, value: {mydictionary[key]}")
JinSnow

94

Wenn Sie Schlüssel und Wert drucken möchten, verwenden Sie Folgendes:

for key, value in my_dict.iteritems():
    print key, value

25
Für Python 3: items () anstelle von iteritems ()
toshiro92

82

Der Grund dafür ist, dass ich diese in ein Dokument drucke und dabei den Schlüsselnamen und den Wert verwenden möchte

Aufgrund der obigen Anforderung würde ich Folgendes vorschlagen:

keys = mydictionary.keys()
keys.sort()

for each in keys:
    print "%s: %s" % (each, mydictionary.get(each))

Ich bevorzuge die anderen Antworten wie die for-Schleife my_dict.item()oder das Listenverständnis wie, keys = list(my_dict.keys)aber nur für den Fall, dass jemand dies in Python 3 tun möchte: (Zeile 2) keys = sorted(my_dict.keys())+ add () zum Drucken.
Honiix

49

Wenn das Wörterbuch ein Paar wie dieses enthält:

d = {'age':24}

dann kannst du als bekommen

field, value = d.items()[0]

Gehen Sie für Python 3.5 folgendermaßen vor:

key = list(d.keys())[0]

4
Python3.5:TypeError: 'dict_items' object does not support indexing
Sinux

Ziemlich hackisch, aber d .__ iter __ () .__ next __ () macht den Trick. Du bekommst 'Alter'. Sie erhalten das gleiche Ergebnis mit diesem d.items () .__ iter __ () .__ next __ () [0].
Yoshi

2
In Python3 funktioniert dies für ein Paar Diktate:key = list(d.keys())[0]
Juha Untinen

Wenn Sie ein großes Diktat haben, ist die Verwendung next()besser gemäß: stackoverflow.com/a/27638751/1488445
Juha Untinen

14

keys=[i for i in mydictionary.keys()] oder keys = list(mydictionary.keys())


Bitte stellen Sie sicher, dass Sie Code-Tags verwenden und erläutern Sie auch Ihre Antwort.
Chrismas007

9

So einfach ist das:

mydictionary={'keyname':'somevalue'}
result = mydictionary.popitem()[0]

Sie werden Ihr Wörterbuch ändern und sollten zuerst eine Kopie davon erstellen


8

Sie können einfach verwenden *, um die Wörterbuchschlüssel zu entpacken. Beispiel:

d = {'x': 1, 'y': 2}
t = (*d,)
print(t) # ('x', 'y')

python34: SyntaxError: kann Sternausdruck nur als Zuweisungsziel verwenden
Tcll

Verdammt, ich benutze Python34, weil ich in meiner Windows-Testumgebung nichts Neueres ausführen kann.
Tcll

5

Durch Iterieren über Wörterbuch (i) wird der Schlüssel zurückgegeben und dann (i) verwendet, um den Wert zu erhalten

for i in D:
    print "key: %s, value: %s" % (i, D[i])

3

Für Python 3 Wenn Sie nur die Schlüssel erhalten möchten, verwenden Sie diese. Ersetzen Sie print (Schlüssel) durch print (Werte), wenn Sie die Werte möchten.

for key,value in my_dict:
  print(key)

3

Was ich manchmal mache, ist, dass ich ein anderes Wörterbuch erstelle, um in der Lage zu sein, auf alles zuzugreifen, was ich als Zeichenfolge benötige. Dann iteriere ich über mehrere Wörterbücher, die mit Schlüsseln übereinstimmen, um beispielsweise eine Tabelle mit der ersten Spalte als Beschreibung zu erstellen.

dict_names = {'key1': 'Text 1', 'key2': 'Text 2'}
dict_values = {'key1': 0, 'key2': 1} 

for key, value in dict_names.items():
    print('{0} {1}'.format(dict_names[key], dict_values[key])

Sie können problemlos eine große Anzahl von Wörterbüchern verwenden, um Daten abzugleichen (ich mag die Tatsache, dass Sie mit Wörterbuch immer auf etwas verweisen können, das als Schlüsselname bekannt ist).

Ja, ich verwende Wörterbücher, um Ergebnisse von Funktionen zu speichern, sodass ich diese Funktionen nicht jedes Mal ausführen muss, wenn ich sie nur einmal aufrufe und dann jederzeit auf die Ergebnisse zugreifen kann.

BEARBEITEN: In meinem Beispiel spielt der Schlüsselname keine Rolle (ich persönlich verwende gerne dieselben Schlüsselnamen, da es einfacher ist, einen einzelnen Wert aus einem meiner übereinstimmenden Wörterbücher auszuwählen). Stellen Sie einfach sicher, dass die Anzahl der Schlüssel in jedem Wörterbuch ist das Gleiche


0

Sie können dies tun, indem Sie die Diktatschlüssel und -werte in die Liste umwandeln. Dies kann auch für Artikel durchgeführt werden.

Beispiel:

f = {'one': 'police', 'two': 'oranges', 'three': 'car'}
list(f.keys())[0] = 'one'
list(f.keys())[1] = 'two'

list(f.values())[0] = 'police'
list(f.values())[1] = 'oranges'

-2

Ändern Sie einfach die Position Ihrer Schlüssel und Werte und verwenden Sie dann Werte, um den Schlüssel zu erhalten. Im Wörterbuch können Schlüssel denselben Wert haben, aber sie (Schlüssel) sollten unterschiedlich sein. Wenn Sie beispielsweise eine Liste haben und der erste Wert davon ein Schlüssel für Ihr Problem ist und andere Werte die Spezifikationen des ersten Werts sind:

list1=["Name",'ID=13736','Phone:1313','Dep:pyhton']

Mit dieser Schleife können Sie die Daten einfach im Wörterbuch speichern und verwenden:

data_dict={}
for i in range(1, len(list1)):
     data_dict[list1[i]]=list1[0]
print(data_dict)
{'ID=13736': 'Name', 'Phone:1313': 'Name', 'Dep:pyhton': 'Name'}

Dann können Sie die Basis des Schlüssels (Namens) auf einem beliebigen Eingabewert finden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.