2013-08-01 22 views
5

Sözlükteki bir dizi anahtarın üzerinde nasıl yinelersiniz? örneğinSözlükteki bir dizi tuş üzerinde nasıl yineleme yapılır?

, aşağıdaki sözlüğü varsa: Sadece tuşları standart hata sonrasında üzerinde yineleme nasıl

{'Domain Source': 'Analyst', 'Recommend Suppress': 'N', 'Standard Error': '0.25', 'Element ID': '1.A.1.d.1', 'N': '8', 'Scale ID': 'IM', 'Not Relevant': 'n/a', 'Element Name': 'Memorization', 'Lower CI Bound': '2.26', 'Date': '06/2006', 'Data Value': '2.75', 'Upper CI Bound': '3.24', 'O*NET-SOC Code': '11-1011.00'} 

? İdeal olarak, standart hatadan sonra tüm değerleri almak istiyorum.

Teşekkürler!


Sadece yorum adres: Ben iteritems() hakkında biliyorum ama Altsimgeleme çalıştığında, hata döndürdü: İndislenebilir değil. Ayrıca, anahtar/değerler her seferinde aynı sırayla gelir.

+0

Sen iterkeys() yöntemini kullanarak anahtarları adımlayabilirsiniz: İşte nasıl. örn: [mydict.iterkeys()] 'de anahtar için tuş. –

+1

@ HugoCorrá Bu sadece bir tuştaki anahtarlar içinde kullanıldıkları sırayla kaydedilirler, bu nedenle jermetre – hetepeperfan

+0

cevabına bakın Üzgünüm, yanlış anlamıştım. Şimdi sıralı ve sıralanmamış sözlüklerin önemini anlıyorum. – goldisfine

cevap

6

Python sözlüğündeki tuşlar belirli bir sırada değil.

Bunun yerine bir OrderedDict kullanmak isteyeceksiniz. Şimdi tuşları garantilidir

>>> d = OrderedDict([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')]) 

sırayla iade edilecek: Belirli bir değerden sonra tüm anahtarları kapmak istiyorsan

>>> d.keys() 
['key1', 'key2', 'key3'] 

kullanabileceğiniz itertools.dropwhile: Örneğin

>>> import itertools 
>>> list(itertools.dropwhile(lambda k: k != 'key2', d.iterkeys())) 
['key2', 'key3'] 
2

Burada sorun, Python sözlüklerinin sırasız olması, yani 'Standard Error''dan sonra anahtarlar üzerinde yinelemenin gerçekten anlamlı olmadığıdır.

2

Sorun, sözlüklerin sırasız olmasıdır. Bunu yaptıktan sonra, eşyaların sırasına güvenmenin bir yolu yoktur. Bir sözlük anahtar/değer saklamaz

>>> d = {'Domain Source': 'Analyst', 'Recommend Suppress': 'N', 'Standard Error': '0.25', 'Element ID': '1.A.1.d.1', 'N': '8', 'Scale ID': 'IM', 'Not Relevant': 'n/a', 'Element Name': 'Memorization', 'Lower CI Bound': '2.26', 'Date': '06/2006', 'Data Value': '2.75', 'Upper CI Bound': '3.24', 'O*NET-SOC Code': '11-1011.00'} 
>>> [x for x in d if x not in ('Domain Source', 'Recommend Suppress')] 
['N', 'Scale ID', 'Not Relevant', 'Element Name', 'Data Value', 'Standard Error', 'Element ID', 'Lower CI Bound', 'Date', 'Upper CI Bound', 'O*NET-SOC Code'] 
+0

İteritems() gerekiyor mu? – goldisfine

2

: Genel bir çözüm istiyorsanız zaten sözlükte verilerinizi varsa Yani, açıkça iki birinci tuşları hariç tutabilir OrderedDict

kullanabilirsiniz eklerseniz aynı siparişte çiftler ... OrderedDict kullanılmadıkça.

entries = [('Domain Source', 'Analyst'), ('Recommend Suppress', 'N'), 
('Standard Error', '0.25'), ('Element ID', '1.A.1.d.1'), 
('N', '8'), ('Scale ID', 'IM'), ('Not Relevant', 'n/a'), 
('Element Name', 'Memorization'), ('Lower CI Bound', '2.26'), 
('Date', '06/2006'), ('Data Value', '2.75'), 
('Upper CI Bound', '3.24'), ('O*NET-SOC Code', '11-1011.00')] 

from collections import OrderedDict 
d = OrderedDict(entries) 
d.keys()[2:] 

=> ['Standard Error', 'Element ID', 'N', 'Scale ID', 'Not Relevant', 
    'Element Name', 'Lower CI Bound', 'Date', 'Data Value', 
    'Upper CI Bound', 'O*NET-SOC Code'] 
İlgili konular