Jak mogę uzyskać klucz słownika jako zmienną bezpośrednio w Pythonie (nie wyszukując wartości)?


189

Przepraszam za to podstawowe pytanie, ale moje wyszukiwania na ten temat nie pokazują niczego innego, jak uzyskać klucz słownika na podstawie jego wartości, którego wolałbym nie używać, ponieważ po prostu chcę tekstu / nazwy klucza i martwię się tym wyszukiwaniem według wartości może skończyć się zwracaniem 2 lub więcej kluczy, jeśli słownik zawiera wiele wpisów ... próbuję to zrobić:

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

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

Powodem tego jest to, że drukuję je do dokumentu i chcę przy tym użyć nazwy klucza i wartości

Widziałem metodę poniżej, ale wydaje się, że to po prostu zwraca wartość klucza

get(key[, default])

Czy chcesz po prostu sprawdzić, czy „keyname” istnieje w słowniku? Bo zrobić już go.
ponownie

1
nie, jak powiedziałem, trzeba to wydrukować, będzie to iteracja przez dużą liczbę kluczy
Rick

currentjest bieżącym kluczem, po prostu zróbprint current
Moberg

4
Jak zdobędziesz pierwszy klucz w słowniku? (bez iteracji)
VISQL

Odpowiedzi:


238

Powinieneś iterować klucze:

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

10
Możesz po prostu napisaćfor key in mydictionary:
blokeley,

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

94

Jeśli chcesz wydrukować klucz i wartość, użyj następujących poleceń:

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

26
Dla Pythona 3: items () zamiast iteritems ()
toshiro92

82

Powodem tego jest to, że drukuję je do dokumentu i chcę przy tym użyć nazwy klucza i wartości

W oparciu o powyższe wymaganie sugeruję:

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

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

Wolę inne odpowiedzi, takie jak pętla for my_dict.item()lub rozumienie listy, keys = list(my_dict.keys)ale na wypadek, gdyby ktoś chciał to zrobić w Pythonie 3: (wiersz 2) keys = sorted(my_dict.keys())+ add () do wydrukowania.
Honiix,

50

Jeśli słownik zawiera jedną parę w ten sposób:

d = {'age':24}

wtedy możesz dostać jako

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

W przypadku języka Python 3.5 wykonaj następujące czynności:

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

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

Dość hackish, ale d .__ iter __ () .__ next __ () załatwia sprawę. dostajesz „wiek”. Otrzymujesz ten sam wynik z tym d.items () .__ iter __ () .__ next __ () [0].
yoshi,

2
W Python3 działa to dla jednej pary key = list(d.keys())[0]
dykt

Jeśli masz ogromny dykt, używanie next()jest lepsze zgodnie z: stackoverflow.com/a/27638751/1488445
Juha Untinen

14

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


Pamiętaj, aby użyć tagów kodu i wyjaśnić swoją odpowiedź.
Chrismas007

9

Tak proste jak to:

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

Zmodyfikujesz słownik i powinieneś najpierw go skopiować


8

Możesz po prostu użyć tego, *który rozpakowuje klucze słownika. Przykład:

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

python34: SyntaxError: może używać wyrażenia oznaczonego gwiazdką tylko jako celu przypisania
Tcll

dang, używam python34, ponieważ nie mogę uruchomić niczego nowszego w moim środowisku testowym Windows.
Tcll

5

Iterate over dictionary (i) zwróci klucz, a następnie użyje go (i), aby uzyskać wartość

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

3

Dla python 3 Jeśli chcesz uzyskać tylko klucze, użyj tego. Zamień print (klucz) na print (wartości), jeśli chcesz wartości.

for key,value in my_dict:
  print(key)

3

Czasami robię to, że tworzę inny słownik, aby móc uzyskać dostęp do wszystkiego, co według mnie jest potrzebne jako ciąg. Następnie iteruję po wielu słownikach dopasowujących klucze, aby zbudować np. Tabelę z pierwszą kolumną jako opisem.

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])

Możesz z łatwością zrobić ogromną liczbę słowników w celu dopasowania danych (podoba mi się to, że w słowniku zawsze możesz odnosić się do czegoś dobrze znanego jako nazwa klucza)

tak, używam słowników do przechowywania wyników funkcji, więc nie muszę uruchamiać tych funkcji za każdym razem, gdy wywołuję je tylko raz, a następnie uzyskuję dostęp do wyników w dowolnym momencie.

EDYCJA: w moim przykładzie nazwa klucza tak naprawdę nie ma znaczenia (osobiście lubię używać tych samych nazw kluczy, ponieważ łatwiej jest wybrać jedną wartość z dowolnego z moich pasujących słowników), po prostu upewnij się, że liczba kluczy w każdym słowniku jest to samo


0

Możesz to zrobić, rzutując klucze i wartości dict na listę. Można to również zrobić dla przedmiotów.

Przykład:

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

łatwo zmieniaj pozycję swoich kluczy i wartości, a następnie użyj wartości, aby uzyskać klucz, w słowniku klucze mogą mieć tę samą wartość, ale one (klucze) powinny być inne. na przykład, jeśli masz listę, a pierwsza jej wartość jest kluczem do Twojego problemu, a inne wartości są specyfikacjami pierwszej wartości:

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

dzięki tej pętli możesz łatwo zapisywać i wykorzystywać dane w Słowniku:

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'}

wtedy możesz znaleźć klucz (nazwę) na podstawie dowolnej wartości wejściowej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.