2012-05-08 18 views
8

preresult è un OrderedDict().Ricevi i primi 100 elementi di OrderedDict

Voglio salvare i primi 100 elementi in esso. Oppure mantieni preresult ma elimina tutto tranne i primi 100 elementi.

La struttura è come questo

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

Will iSlice lavoro per esso miniera dice itertool.islice non ha items

risposta

14

Ecco una soluzione semplice utilizzando itertools:?

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

Questo restituisce solo chiavi. Se si desidera che gli elementi, utilizzare iteritems (o semplicemente items in Python 3):

>>> 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, è necessario convertirlo in un elenco prima di tagliare regolare funzionerà. 'islice' è più efficiente perché può saltare gli elementi non necessari. –

+0

scusate, mio ​​errore: P ho davvero bisogno di rileggere itertools e la documentazione delle collezioni. – KurzedMetal

+0

@senderle Si dice che OrderDict non ha iteritems. Io uso python 3.2. – juju

3

È possibile tagliare le chiavi del OrderedDict e copiarlo.

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 è una versione a fette di un

Problemi correlati