Sözlük anahtarını doğrudan Python'da değişken olarak nasıl alabilirim (değerden arayarak değil)?


189

Bu temel soru için özür dilerim, ancak bu konuda yaptığım aramalar, bir anahtarın metnini / adını istediğimden ve aramanın değerine göre sözlük çok sayıda girişleri varsa 2 veya daha fazla anahtar döndürme sonucu olabilir ... ne yapmaya çalışıyorum budur:

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

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

Bunun nedeni, bunları bir belgeye yazdırıyorum ve anahtar adını ve bunu yaparken değeri kullanmak istiyorum

Aşağıdaki yöntemi gördüm ama bu sadece anahtarın değerini döndürüyor gibi görünüyor

get(key[, default])

Sözlükte 'anahtar adının' varlığını kontrol etmek istiyor musunuz? Eğer Çünkü yapmak zaten sahip.
relet

1
hayır dediğim gibi, yazdırmak gerekiyor, çok sayıda anahtar aracılığıyla yinelenen olurdu
Rick

currentşu anki anahtar, sadece yapprint current
Moberg

4
Sözlükteki ilk anahtarı nasıl elde edersiniz? (yineleme yok)
VISQL

Yanıtlar:


238

Aşağıdakilerle anahtarlar üzerinden yineleme yapmalısınız:

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

10
Sadece yazabilirsinizfor key in mydictionary:
Blokeley

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

94

Anahtar ve değer yazdırmak istiyorsanız, aşağıdakileri kullanın:

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

26
Python 3 için:
iteritems

82

Bunun nedeni, bunları bir belgeye yazdırıyorum ve anahtar adını ve bunu yaparken değeri kullanmak istiyorum

Yukarıdaki gereksinime dayanarak bu önerebilirim:

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

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

For döngüsü açık my_dict.item()veya liste kavraması gibi diğer cevapları tercih ederim, keys = list(my_dict.keys)ancak birileri bunu Python 3'te yapmak istiyorsa: (satır 2) keys = sorted(my_dict.keys())+ yazdırmak için add ().
Honiix

50

Sözlük böyle bir çift içeriyorsa:

d = {'age':24}

sonra alabilirsin

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

Python 3.5 için şunları yapın:

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

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

Oldukça hackish ama d .__ iter __ () .__ next __ () bir hile yapar. 'yaş' alırsınız. Aynı sonucu bu d.items () .__ iter __ () .__ next __ () [0] ile elde edersiniz.
yoshi

2
Python3'te, bu bir çift için geçerlidir:key = list(d.keys())[0]
Juha Untinen

Çok büyük bir next()
kararınız varsa, kullanımı şuna

14

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


Lütfen kod etiketlerini kullandığınızdan ve cevabınızı da açıkladığınızdan emin olun.
Chrismas007

9

Kadar basit:

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

Sözlüğünüzü değiştireceksiniz ve önce bir kopyasını oluşturmalısınız


8

*Hangi sözlük anahtarları açar sadece kullanabilirsiniz . Misal:

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

python34: SyntaxError: yıldızlı ifadeyi yalnızca atama hedefi olarak kullanabilir
Tcll

dang, python34 kullanıyorum çünkü Windows test ortamımda daha yeni bir şey çalıştıramıyorum.
Tcll

5

Sözlük (i) üzerinden yineleme, anahtarı döndürüp değeri almak için (i)

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

3

Python 3 için Sadece anahtarları almak istiyorsanız bunu kullanın. Değerleri istiyorsanız print (anahtar) öğesini print (değerler) ile değiştirin.

for key,value in my_dict:
  print(key)

3

Bazen yaptığım şey, dize olarak erişmem gerektiğini düşündüğüm her şeyi yapabilmek için başka bir sözlük oluşturmak. Sonra açıklama gibi ilk sütun ile bir tablo oluşturmak için anahtarları eşleşen birden fazla sözlük üzerinde yineleme.

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

Verileri eşleştirmek için çok sayıda sözlük için kolayca yapabilirsiniz (Sözlükle her zaman anahtar adı olarak bilinen bir şeye başvurabileceğinizi seviyorum)

evet İşlevlerin sonuçlarını saklamak için sözlükler kullanıyorum, bu yüzden sadece bir kez çağırdığımda ve sonra sonuçlara her zaman eriştiğimde bu işlevleri çalıştırmam gerekmiyor.

DÜZENLEME: benim örneğimde anahtar adı gerçekten önemli değil (şahsen aynı anahtar isimlerini kullanmaktan hoşlanıyorum çünkü eşleşen sözlüklerimden herhangi birinden tek bir değer seçmek daha kolay), sadece her sözlükteki anahtar sayısının aynısı


0

Bunu, dict anahtarlarını ve değerleri listeye dökerek yapabilirsiniz. Öğeler için de yapılabilir.

Misal:

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

anahtarlarınızın ve değerlerinizin konumunu kolayca değiştirin, daha sonra anahtar almak için değerleri kullanın, sözlük anahtarlarında aynı değere sahip olabilirler, ancak bunlar (anahtarlar) farklı olmalıdır. örneğin, bir listeniz varsa ve listenin ilk değeri sorununuz için bir anahtarsa ​​ve diğer değerler ilk değerin özellikleridir:

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

bu döngü ile Sözlük'teki verileri kolayca kaydedebilir ve kullanabilirsiniz:

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

anahtar (isim) tabanını herhangi bir giriş değerinde bulabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.