2012-05-08 28 views
8

preresultOrderedDict().Nhận 100 yếu tố đầu tiên của OrderedDict

Tôi muốn lưu 100 phần tử đầu tiên vào đó. Hoặc giữ preresult nhưng xóa mọi thứ khác với 100 phần tử đầu tiên.

Cấu trúc là như thế này

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

sẽ islice làm việc cho nó Mine kể itertool.islice không có items

Trả lời

14

Dưới đây là một giải pháp đơn giản sử dụng 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] 

này chỉ trả về phím. Nếu bạn muốn mục, sử dụng iteritems (hoặc chỉ cần items bằng 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, bạn cần phải chuyển đổi nó vào một danh sách trước khi cắt thường xuyên sẽ làm việc. 'islice' hiệu quả hơn vì nó có thể bỏ qua các mục không cần thiết. –

+0

xin lỗi, lỗi của tôi: P tôi thực sự cần đọc lại tài liệu về bộ sưu tập và tài liệu về bộ sưu tập. – KurzedMetal

+0

@senderle Nó nói OrderDict không có iteritems. Tôi sử dụng python 3.2. – juju

3

Bạn có thể cắt các phím của OrderedDict và sao chép nó.

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 là một phiên bản thái lát của một

Các vấn đề liên quan