2012-05-08 9 views
8

'un ilk 100 öğesinin bir OrderedDict() olduğunu öğrenin.OrderedDict

İçinde ilk 100 öğeyi kaydetmek istiyorum. Veya preresult'u saklayın, ancak ilk 100 öğeden başka her şeyi silin.

yapısı bunun için çalışmalarını islice Will bu

stats = {'a': {'email1':4, 'email2':3}, 
     'the': {'email1':2, 'email3':4}, 
     'or': {'email1':2, 'email3':1}} 

gibidir Mine basit bir çözüm itertools kullanıyor İşte items

cevap

14

yok itertool.islice söyler:?

>>> import collections 
>>> from itertools import islice 
>>> preresult = collections.OrderedDict(zip(range(200), range(200))) 
>>> list(islice(preresult, 100))[-10:] 
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 

Bu yalnızca döndürür anahtarlar. Öğeleri istiyorsanız, iteritems kullanmak (veya Python 3'te sadece items):

>>> list(islice(preresult.iteritems(), 100))[-10:] 
[(90, 90), (91, 91), (92, 92), (93, 93), (94, 94), (95, 95), (96, 96), (97, 97), (98, 98), (99, 99)] 
+0

@KurzedMetal dilimlenmiş bir versiyonudur, normal dilimleme çalışacaktır önce bir liste dönüştürmek gerekir. 'islice' daha verimlidir, çünkü gereksiz öğeleri atlayabilir. –

+0

Üzgünüm, hatam: Gerçekten itertools ve koleksiyon belgelerini tekrar okuman gerekiyor. – KurzedMetal

+0

@senderle OrderDict'ın iteritemleri olmadığını söylüyor. Python 3.2 kullanıyorum. – juju

3

Sen OrderedDict anahtarlarını dilim ve kopyalayabilirsiniz.

from collections import OrderedDict 

a = OrderedDict() 
for i in xrange(10): 
    a[i] = i*i 

b = OrderedDict() 
for i in a.keys()[0:5]: 
    b[i] = a[i] 

b

İlgili konular