2015-08-19 20 views
5

Tôi có dưới cấu trúcPhân loại theo từ điển lồng nhau trong từ điển Python

{ 
    'searchResult' : [{ 
      'resultType' : 'station', 
      'ranking' : 0.5 
     }, { 
      'resultType' : 'station', 
      'ranking' : 0.35 
     }, { 
      'resultType' : 'station', 
      'ranking' : 0.40 
     } 
    ] 
} 

và muốn nhận được

{ 
    'searchResult' : [{ 
      'resultType' : 'station', 
      'ranking' : 0.5 
     }, { 
      'resultType' : 'station', 
      'ranking' : 0.4 
     }, { 
      'resultType' : 'station', 
      'ranking' : 0.35 
     } 
    ] 
} 

thử mã không thành công

result = sorted(result.items(), key=lambda k: k[1][0][1]["ranking"], reverse=True) 
+0

Cảm ơn tất cả! Nhưng phương thức nào nhanh hơn 'd [" mục "]. Sort()' hoặc 'được sắp xếp()'? – SpanishBoy

+1

có thể trùng lặp của [Làm cách nào để sắp xếp danh sách từ điển theo giá trị của từ điển bằng Python?] (Http://stackoverflow.com/questions/72899/how-do-i-sort-a-list-of-dictionaries -by-values-of-the-dictionary-in-python) – PyNEwbie

+0

@SpanishBoy 'sort' trả về một đối tượng mới. Nếu bạn không cần đối tượng ban đầu, bạn nên gắn bó với 'sort' để tăng tốc độ và hiệu quả bộ nhớ. –

Trả lời

5

Nếu bạn là okay với thay đổi các đối tượng tại chỗ.

a = { 
    'searchResult' : [{ 
         'resultType' : 'station', 
         'ranking' : 0.5 
         }, { 
         'resultType' : 'station', 
         'ranking' : 0.35 
         }, { 
         'resultType' : 'station', 
         'ranking' : 0.40 
         }] 
    } 

a["searchResult"].sort(key=lambda d: d["ranking"], reverse=True) 

Hoặc bạn có thể tạo một bản sao sâu để giữ bản gốc

from copy import deepcopy 


srt_dict = deepcopy(a) 
srt_dict["searchResult"].sort(key=lambda d: d["ranking"], reverse=True) 
2

Bạn chỉ có thể sắp xếp danh sách và viết trên chính nó trong từ điển.

result = { 
    'searchResult' : [{ 
      'resultType' : 'station', 
      'ranking' : 0.5 
     }, { 
      'resultType' : 'station', 
      'ranking' : 0.35 
     }, { 
      'resultType' : 'station', 
      'ranking' : 0.40 
     } 
    ] 
} 

result['searchResult'] = sorted(result['searchResult'], key= lambda x: x['ranking'], reverse=True) 
5

Bạn chỉ có thể làm một loại inplace trong danh sách, sử dụng key=itemgetter("ranking")reverse=True:

from operator import itemgetter 
d["searchResult"].sort(key=itemgetter("ranking"),reverse=True) 

print(d) 
{'searchResult': [{'resultType': 'station', 'ranking': 0.5}, {'resultType': 'station', 'ranking': 0.4}, {'resultType': 'station', 'ranking': 0.35}]} 
Các vấn đề liên quan