2012-05-08 21 views
8

preresult es un OrderedDict().Obtenga los primeros 100 elementos de OrderedDict

Quiero guardar los primeros 100 elementos en él. O mantenga preresult pero elimine todo excepto los primeros 100 elementos.

La estructura es como esto

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

Se Islice trabajo para que la mina dice itertool.islice no tiene items

Respuesta

14

he aquí una solución sencilla utilizando 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] 

Esto devuelve sólo llaves. Si desea que los elementos, utilice iteritems (o simplemente items en 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, es necesario convertirlo en una lista antes de rebanar regular funcionará. 'islice' es más eficiente porque puede omitir los elementos innecesarios. –

+0

lo siento, mi error: P realmente necesito volver a leer la documentación de itertools y colecciones. – KurzedMetal

+0

@senderle Dice que OrderDict no tiene iteritems. Yo uso Python 3.2. – juju

3

Usted puede cortar las llaves de OrderedDict y 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 es una versión en rodajas de un

Cuestiones relacionadas