2015-03-19 21 views
8

Here is a list comprehension:tạo ra lệnh dict từ danh sách hiểu?

L = [{k: d[k](v) for (k, v) in l.iteritems()} for l in L] 

nơi

  • L là một danh sách các từ điển đã ra lệnh (ví dụ: đối tượng của collections.OrderedDict), nơi mà các từ điển có cùng một bộ chìa khóa.

  • d là một từ điển đặt hàng khác, cũng có cùng một bộ khóa như các từ điển đặt hàng trước đó.

  • Đối với mỗi key, d[key] là một chức năng có thể áp dụng cho L[i][key], tức là d[key](L[i][key]).

Tất cả các từ điển đã cho là lệnh yêu cầu và có cùng thứ tự trong khóa của chúng.

Nhưng mã sẽ tạo từ điển không có thứ tự. Làm thế nào tôi có thể tạo ra một lệnh dict theo thứ tự chính như các bộ từ điển được đặt hàng?

Trả lời

9

collections.OrderedDict không là gì ngoài lệnh chính tả, ghi nhớ thứ tự các yếu tố được bao gồm trong đó. Vì vậy, bạn có thể tạo một với hàm tạo của nó như thế này

[OrderedDict((k, d[k](v)) for (k, v) in l.iteritems()) for l in L] 
4

Từ điển Python không giống như từ điển C++ không có thứ tự vì nó sử dụng hàm băm cho khóa của nó. Analternative sẽ sử dụng một chuyên ngành theo thứ tự từ điển python được gọi là collections.OrdredDict.

Điều này sẽ biến tờ khai của bạn thành

from collections import OrderedDict 
L = [OrderedDict((k, d[k](v)) for (k, v) in l.iteritems()) for l in L] 
Các vấn đề liên quan