Nói max()
làm thế nào để tính toán tối đa cho một chuỗi các chỉ số:
max(xrange(len(ld)), key=lambda index: ld[index]['size'])
này sẽ trả lại chỉ số mà chìa khóa size
là cao nhất:
>>> ld = [{'prop': 'foo', 'size': 100}, {'prop': 'boo', 'size': 200}]
>>> max(xrange(len(ld)), key=lambda index: ld[index]['size'])
1
>>> ld[1]
{'size': 200, 'prop': 'boo'}
Nếu bạn muốn mà từ điển tất cả cùng, sau đó bạn chỉ có thể sử dụng:
max(ld, key=lambda d: d['size'])
và để có được cả hai chỉ số và từ điển, bạn có thể sử dụng enumerate()
đây:
max(enumerate(ld), key=lambda item: item[1]['size'])
Một số demoing hơn:
>>> max(ld, key=lambda d: d['size'])
{'size': 200, 'prop': 'boo'}
>>> max(enumerate(ld), key=lambda item: item[1]['size'])
(1, {'size': 200, 'prop': 'boo'})
Chức năng key
được truyền mỗi phần tử trong chuỗi đầu vào lần lượt và max()
sẽ chọn phần tử trong đó giá trị trả về của hàm key
là cao nhất.
Sử dụng danh sách riêng để trích xuất tất cả các giá trị size
sau đó ánh xạ trở lại danh sách ban đầu của bạn không hiệu quả lắm (bây giờ bạn cần lặp lại danh sách hai lần). list.index()
không thể hoạt động vì nó phải khớp với toàn bộ từ điển, không chỉ một giá trị trong đó.
Nguồn
2015-05-30 13:43:19
Cám ơn bạn trả lời, tôi đã thêm một số nội dung, bạn nghĩ gì về? Tôi cần một giải pháp dễ dàng hơn. Của bạn là tuyệt vời nhưng một dễ hiểu hơn sẽ được tốt đẹp! – Kvash
Tôi đang học rất nhiều từ câu trả lời của bạn. Cảm ơn cho nó. – Kvash