2012-06-27 50 views
11

Tôi về cơ bản đang cố gắng lặp qua một dict và in ra các khóa/giá trị từ giá trị lớn nhất đến thấp nhất. Tôi đã tìm kiếm trang web này và rất nhiều người đang sử dụng lambda nhưng tôi không thực sự chắc chắn làm thế nào nó làm việc vì vậy tôi đang cố gắng để tránh nó cho bây giờ.In một dict được sắp xếp theo các giá trị

dictIterator = iter(sorted(bigramDict.iteritems())) 
for ngram, value in dictIterator: 
    print("There are " + str(value) + " " + ngram) 

Nhìn qua đoạn mã trên, tôi sẽ tạo một trình lặp trả về các cặp khóa/giá trị theo thứ tự từ lớn nhất đến nhỏ nhất nhưng không.

Có ai có thể xem vấn đề là gì không? hoặc phương pháp khác để làm điều này?

+1

nhìn lúc này: http://stackoverflow.com/questions/613183/python-sort-a-dictionary-by-value –

Trả lời

13

Người ta có thể tận dụng thực tế là loại hoạt động trên các bộ bằng cách xem xét các yếu tố đầu tiên là quan trọng hơn etc thứ hai:

d = { "a":4, "c":3, "b":12 } 
d_view = [ (v,k) for k,v in d.iteritems() ] 
d_view.sort(reverse=True) # natively sort tuples by first element 
for v,k in d_view: 
    print "%s: %d" % (k,v) 

Output:

b: 12 
a: 4 
c: 3 

EDIT : một lớp lót, biểu thức máy phát điện:

sorted(((v,k) for k,v in d.iteritems()), reverse=True) 

Output:

[(12, 'b'), (4, 'a'), (3, 'c')] 
0
d = { "a":4, "c":3, "b":12 } 
for v in sorted(d.values()): 
    for key in d: 
     if d[ key ] == v: 
      print key, v 
      break 
2
>>> d = { "a":4, "c":3, "b":12 } 
>>> from operator import itemgetter 
>>> lst = sorted(d.iteritems(), key=itemgetter(1)) 
>>> for t in lst: print '%s : %d' % (t[0], t[1]) 
... 
c : 3 
a : 4 
b : 12 
15

Bạn có thể sử dụng các tham số của keysorted để sắp xếp theo mục 2:

>>> d = { "a":4, "c":3, "b":12 } 
>>> from operator import itemgetter 
>>> for k, v in sorted(d.items(), key=itemgetter(1)): 
    print k, v 


c 3 
a 4 
b 12 
>>> 
Các vấn đề liên quan