it-swarm.com.de

Wie drucke ich den Schlüssel eines Wörterbuchs?

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! :)

183
Benjamin

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.

327
juanchopanza

Zusätzlich können Sie ... verwenden.

print(dictionary.items()) #prints keys and values
print(dictionary.keys()) #prints keys
print(dictionary.values()) #prints values
44
Mason

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.

31
Dominic Santos
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

29
ademar111190

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.

25
zenna

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())
8
Ned Batchelder

Oder Sie können es so machen:

for key in my_dict:
     print key, my_dict[key]
4
Eugene Soldatov

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))))
4
FouadDev
# 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 ...

3
Brian Bruggeman
import pprint
pprint.pprint(mydic.keys())
2
Matt Joiner

Was ist falsch daran, stattdessen 'key_name' zu verwenden, selbst wenn es sich um eine Variable handelt?

2
Ry-

Stellen Sie sicher, dass Sie dies tun

dictionary.keys()
# rather than
dictionary.keys
2
Crt
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)
1
Rob Wilson

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

1
Fekete Sumér

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.
0
PeaWagon

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
0
fdb

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)
0
Jeril

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.

0
Victoria Stuart
key_name = '...'
print "the key name is %s and its value is %s"%(key_name, mydic[key_name])
0
Dona