Điều bạn gần như chắc chắn đang tìm kiếm là sử dụng tùy chọn key = cho sắp xếp(), cung cấp hàm trả về khóa sắp xếp tùy ý cho mỗi phần tử. Hàm này có thể kiểm tra kiểu đối số của nó và thực hiện các hành động khác nhau. Ví dụ:
import types
class obj(object):
def __init__(self, arg):
self.name = arg
def extract_name(obj):
if type(obj) is types.DictType:
return obj['name']
else:
return obj.__dict__['name']
d = { 'name': 'Jill'}
print sorted([obj('Jack'), d], key=extract_name)
Thông tin thêm có thể được tìm thấy trên gợi ý của việc sử dụng isinstance các Python wiki
RichieHindle là một tốt nhất. Và trong khi tôi đã ở đó tôi nghĩ nó có thể là tốt đẹp để hỗ trợ các tên phần tử tùy ý thay vì hardcoding 'name':
def extract_elem_v2(elem_name):
def key_extractor(obj):
dct = obj if isinstance(obj, dict) else obj.__dict__
return dct[elem_name]
return key_extractor
Mà bạn có thể sử dụng như sau:
print sorted(list_of_stuff, key=extract_elem_v2('name'))
Nguồn
2009-10-10 20:51:57
+1. Đề xuất nhỏ: 'isinstance (obj, dict)' sẽ là neater, và sẽ cho phép các lớp bắt nguồn từ 'dict'. – RichieHindle
Bạn nói đúng, isinstance là một lựa chọn tốt hơn ở đó, không chắc tại sao tôi không nghĩ về điều đó. Phiên bản cập nhật được thêm vào câu trả lời. Cảm ơn! –
Cảm ơn rất nhiều Jack! Câu trả lời này rất đẹp. Thuộc tính – hekevintran