2012-05-08 57 views
8

preresult jest OrderedDict().Uzyskaj pierwsze 100 elementów z OrderedDict

Chcę zapisać pierwsze 100 elementów w nim. Lub zachowaj preresult, ale usuń wszystko inne niż pierwsze 100 elementów.

Struktura jest jak ten

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

Will islice pracę dla niego Kopalnia mówi itertool.islice nie ma items

Odpowiedz

14

Oto proste rozwiązanie wykorzystujące 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] 

ta zwraca tylko klawiatura. Jeśli chcesz przedmioty, używać iteritems (lub po prostu items w Pythonie 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, trzeba przekonwertować go na liście przed regularnym krojenie zadziała. 'islice' jest bardziej wydajne, ponieważ może pominąć niepotrzebne elementy. –

+0

Przepraszam, mój błąd: P naprawdę muszę ponownie przeczytać dokumentację itertools i kolekcji. – KurzedMetal

+0

@senderle Mówi, że OrderDict nie ma iteritems. Używam Pythona 3.2. – juju

3

Można pokroić klucze OrderedDict i skopiuj go.

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 jest płasko wersja

Powiązane problemy