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])
Stóg
źródło
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])
systempuntoout
źródło
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
Escualo
źródło
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))
Manoj Govindan
źródło
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]
Sudhin
źródło
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())

kurian
źródło
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ć

Libert
źródło
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')
Georg
źródło
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])
splucena
źródło
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)
Siddharth
źródło
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

s3icc0
źródło
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'
lallolu
źródło
-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.

Seyyed Mojtaba Shojasadati
źródło