2011-01-21 27 views
5

hi tôi có danh sách các từ điển .. và tôi muốn sắp xếp nó phân biệt dạng chữdanh sách sắp xếp trường hợp không nhạy cảm sử dụng operator.attrgetter

members = Person.objects.filter(person=person_id) 
members_list = list(members) 

members_list.sort(key = operator.attrgetter(sort_by), reverse = False) 

đây sort_by có tên gọi theo mà tôi muốn sắp xếp thuộc tính. Bây giờ làm thế nào tôi có thể sắp xếp với trường hợp không nhạy cảm?

Xin giúp ..

Trả lời

4

Nếu sort_by là một biến chứa một chuỗi với tên của thuộc tính mà bạn muốn sử dụng cho phân loại và bạn muốn sử dụng operator.attrgetter(), bạn có thể sử dụng này mà chuyển đổi giá trị của thuộc tính rồi nó lấy để toàn bộ chữ thường để so sánh trong các loại:

members_list.sort(key = lambda mbr: operator.attrgetter(sort_by)(mbr).lower(), 
        reverse = False) 

Mặc dù giống như sau là dễ dàng hơn để đọc cũng như hiệu quả hơn:

get_key = operator.attrgetter(sort_by) 
members_list.sort(key = lambda mbr: get_key(mbr).lower(), reverse = False) 
+0

thanx sir làm việc của nó :) – Ahsan

+0

@Ahsan: Bạn đang chào đón ... và tất nhiên nó đã làm việc ;-) – martineau

6
members_list.sort(key = lambda member: getattr(member,sort_by).lower(), reverse = False) 
+0

+1 * Đây * là một trường hợp sử dụng hợp lệ cho 'cừu da' (trớ trêu thay, bạn sẽ không sử dụng một lambda cho điều này trong một ngôn ngữ chức năng, nơi bạn có các công cụ như dấu chấm '(f.g) (x) = f (g (x))'). Nhưng bạn cần 'getattr (member, sort_by)'. – delnan

+0

sort_by là biến của tôi có tên thuộc tính. – Ahsan

+0

@Ahsan, ok tôi hiểu lầm. Tôi đã cập nhật câu trả lời của mình. –

1

Có vẻ như câu hỏi này là về django. Bạn có thể muốn suy nghĩ về việc trả lại một queryset đã được sắp xếp để thay thế. Điều này có nghĩa là bạn có thể rời khỏi quá trình sắp xếp cơ sở dữ liệu và không bận tâm với nó. Xem trang web này: django

+0

bạn là đúng nhưng ở đây trong member_list tôi có một số giá trị quan trọng foriegn quá, thông qua mối quan hệ ngược lại. tôi cũng cần những người trong danh sách này. vì vậy tại truy vấn tôi không thể sử dụng order_by. – Ahsan

+0

bởi lý do này tôi đã sử dụng phương pháp trên để sắp xếp danh sách. – Ahsan

+0

Nó thường có thể rẻ hơn để sắp xếp trong python thay vì DB, đặc biệt là cho các cột không được lập chỉ mục. –

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