Ich möchte einen bestimmten Python Wörterbuchschlüssel drucken:
mydic = {}
mydic['key_name'] = 'value_name'
Jetzt kann ich überprüfen, ob mydic.has_key('key_name')
, aber ich möchte den Namen des Schlüssels 'key_name'
drucken. Natürlich könnte ich mydic.items()
verwenden, aber ich möchte nicht all die aufgelisteten Schlüssel, nur einen bestimmten Schlüssel. Zum Beispiel würde ich folgendes erwarten (in Pseudocode):
print "the key name is", mydic['key_name'].name_the_key(), "and its value is", mydic['key_name']
Gibt es eine name_the_key()
Methode, um einen Schlüsselnamen zu drucken?
Edit: OK, vielen Dank für eure Reaktionen! :) Mir ist klar, dass meine Frage nicht gut formuliert und trivial ist. Ich war nur verwirrt, weil mir klar wurde, dass key_name und mydic['key_name']
zwei verschiedene Dinge sind und ich dachte, es wäre falsch, den key_name
aus dem Wörterbuchkontext heraus zu drucken. Aber in der Tat kann ich einfach den 'Schlüsselnamen' verwenden, um auf den Schlüssel zu verweisen! :)
Ein Wörterbuch hat per Definition eine beliebige Anzahl von Schlüsseln. Es gibt keinen "Schlüssel". Sie haben die Methode keys()
, mit der Sie eine python list
aller Schlüssel erhalten, und Sie haben die Methode iteritems()
, mit der Schlüssel-Wert-Paare zurückgegeben werden
for key, value in mydic.iteritems() :
print key, value
Python 3-Version:
for key, value in mydic.items() :
print (key, value)
Sie haben also die Tasten im Griff, aber sie sind nur sinnvoll, wenn sie an einen Wert gekoppelt sind. Ich hoffe ich habe deine Frage verstanden.
Zusätzlich können Sie ... verwenden.
print(dictionary.items()) #prints keys and values
print(dictionary.keys()) #prints keys
print(dictionary.values()) #prints values
Hmm, ich denke, was Sie vielleicht tun möchten, ist print all die Schlüssel im Wörterbuch und ihre jeweiligen Werte?
Wenn ja, möchten Sie Folgendes:
for key in mydic:
print "the key name is" + key + "and its value is" + mydic[key]
Stellen Sie sicher, dass Sie anstelle von 'auch +' verwenden. Ich denke, das Komma setzt jedes dieser Elemente in eine separate Zeile, wohingegen Plus sie in dieselbe Zeile setzt.
dic = {"key 1":"value 1","key b":"value b"}
#print the keys:
for key in dic:
print key
#print the values:
for value in dic.itervalues():
print value
#print key and values
for key, value in dic.iteritems():
print key, value
Hinweis: In Python 3 wurde dic.iteritems () in dic.items () umbenannt
Der Name des Schlüssels 'Schlüsselname' ist Schlüsselname, daher print 'key_name'
oder eine beliebige Variable, die Sie für ihn repräsentieren.
Da wir alle versuchen zu erraten, was "einen Schlüsselnamen drucken" bedeuten könnte, werde ich es versuchen. Vielleicht möchten Sie eine Funktion, die einen Wert aus dem Wörterbuch entnimmt und den entsprechenden Schlüssel findet? Ein Reverse-Lookup?
def key_for_value(d, value):
"""Return a key in `d` having a value of `value`."""
for k, v in d.iteritems():
if v == value:
return k
Beachten Sie, dass viele Schlüssel den gleichen Wert haben können. Daher gibt diese Funktion einige Schlüssel zurück, die den Wert haben, möglicherweise nicht den von Ihnen beabsichtigten.
Wenn Sie dies häufig tun müssen, ist es sinnvoll, das umgekehrte Wörterbuch zu erstellen:
d_rev = dict(v,k for k,v in d.iteritems())
Oder Sie können es so machen:
for key in my_dict:
print key, my_dict[key]
In Python 3:
# A simple dictionary
x = {'X':"yes", 'Y':"no", 'Z':"ok"}
# To print a specific key (for example key at index 1)
print([key for key in x.keys()][1])
# To print a specific value (for example value at index 1)
print([value for value in x.values()][1])
# To print a pair of a key with its value (for example pair at index 2)
print(([key for key in x.keys()][2], [value for value in x.values()][2]))
# To print a key and a different value (for example key at index 0 and value at index 1)
print(([key for key in x.keys()][0], [value for value in x.values()][1]))
# To print all keys and values concatenated together
print(''.join(str(key) + '' + str(value) for key, value in x.items()))
# To print all keys and values separated by commas
print(', '.join(str(key) + ', ' + str(value) for key, value in x.items()))
# To print all pairs of (key, value) one at a time
for e in range(len(x)):
print(([key for key in x.keys()][e], [value for value in x.values()][e]))
# To print all pairs (key, value) in a Tuple
print(Tuple(([key for key in x.keys()][i], [value for value in x.values()][i]) for i in range(len(x))))
# highlighting how to use a named variable within a string:
mapping = {'a': 1, 'b': 2}
# simple method:
print(f'a: {mapping["a"]}')
print(f'b: {mapping["b"]}')
# programmatic method:
for key, value in mapping.items():
print(f'{key}: {value}')
# yields:
# a 1
# b 2
# using list comprehension
print('\n'.join(f'{key}: {value}' for key, value in dict.items()))
# yields:
# a: 1
# b: 2
Bearbeiten: Aktualisiert für python 3s F-Strings ...
import pprint
pprint.pprint(mydic.keys())
Was ist falsch daran, stattdessen 'key_name'
zu verwenden, selbst wenn es sich um eine Variable handelt?
Stellen Sie sicher, dass Sie dies tun
dictionary.keys()
# rather than
dictionary.keys
dict = {'name' : 'Fred', 'age' : 100, 'employed' : True }
# Choose key to print (could be a user input)
x = 'name'
if x in dict.keys():
print(x)
Wahrscheinlich der schnellste Weg, um nur den Schlüsselnamen abzurufen:
mydic = {}
mydic['key_name'] = 'value_name'
print mydic.items()[0][0]
Ergebnis:
key_name
Konvertiert das dictionary
in ein list
, listet dann das erste Element auf, das das ganze dict
ist, und listet dann den ersten Wert des Elements auf, das ist: key_name
Ich habe diese Frage nachgeschlagen, weil ich wissen wollte, wie ich den Namen "des Schlüssels" abrufen kann, wenn mein Wörterbuch nur einen Eintrag enthält. In meinem Fall war der Schlüssel mir unbekannt und konnte eine beliebige Anzahl von Dingen sein. Folgendes habe ich mir ausgedacht:
dict1 = {'random_Word': [1,2,3]}
key_name = str([key for key in dict1]).strip("'[]'")
print(key_name) # equal to 'random_Word', type: string.
Versuche dies:
def name_the_key(dict, key):
return key, dict[key]
mydict = {'key1':1, 'key2':2, 'key3':3}
key_name, value = name_the_key(mydict, 'key2')
print 'KEY NAME: %s' % key_name
print 'KEY VALUE: %s' % value
Wenn Sie den Schlüssel eines einzelnen Werts erhalten möchten, ist Folgendes hilfreich:
def get_key(b): # the value is passed to the function
for k, v in mydic.items():
if v.lower() == b.lower():
return k
In pythonischer Weise:
c = next((x for x, y in mydic.items() if y.lower() == b.lower()), \
"Enter a valid 'Value'")
print(c)
Ich füge diese Antwort als eine der anderen Antworten hier hinzu ( https://stackoverflow.com/a/5905752/190494 ) und ist datiert (Python 2; iteritems
) Dargestellter Code - wenn er gemäß der vorgeschlagenen Problemumgehung in einem Kommentar zu dieser Antwort für Python 3 aktualisiert wurde - gibt im Stillen nicht alle relevanten Daten zurück.
Hintergrund
Ich habe einige metabolische Daten, die in einem Diagramm dargestellt sind (Knoten, Kanten, ...). In einer Wörterbuchdarstellung dieser Daten haben Schlüssel die Form (604, 1037, 0)
(für Quell- und Zielknoten sowie den Kantentyp), wobei Werte der Form 5.3.1.9
(für EC-Enzymcodes).
Finde Schlüssel für gegebene Werte
Der folgende Code findet meine Schlüssel mit den angegebenen Werten korrekt:
def k4v_edited(my_dict, value):
values_list = []
for k, v in my_dict.items():
if v == value:
values_list.append(k)
return values_list
print(k4v_edited(Edge_attributes, '5.3.1.9'))
## [(604, 1037, 0), (604, 3936, 0), (1037, 3936, 0)]
während dieser Code nur den ersten (von möglicherweise mehreren übereinstimmenden) Schlüssel zurückgibt:
def k4v(my_dict, value):
for k, v in my_dict.items():
if v == value:
return k
print(k4v(Edge_attributes, '5.3.1.9'))
## (604, 1037, 0)
Der zuletzt genannte Code, der naiv aktualisiert wurde und iteritems
durch items
ersetzt, gibt (604, 3936, 0), (1037, 3936, 0
nicht zurück.
key_name = '...'
print "the key name is %s and its value is %s"%(key_name, mydic[key_name])