2011-09-21 28 views
6

Giả sử tôi có một từ điển Python, nhưng các giá trị là một bộ dữ liệu:Từ điển Python truy vấn để lấy giá trị từ bộ tóan

Ví dụ:

dict = {"Key1": (ValX1, ValY1, ValZ1), "Key2": (ValX2, ValY2, ValZ2),...,"Key99": (ValX99, ValY99, ValY99)} 

và tôi muốn chỉ lấy giá trị thứ ba từ bộ dữ liệu, ví dụ: ValZ1, ValZ2 hoặc ValZ99 từ ví dụ trên.

tôi có thể làm như vậy bằng .iteritems(), ví dụ như:

for key, val in dict.iteritems(): 
     ValZ = val[2] 
tuy nhiên

, là có một cách tiếp cận trực tiếp hơn?

Lý tưởng nhất, tôi muốn truy vấn từ điển theo khóa và chỉ trả về giá trị thứ ba trong bộ ...

ví dụ:

dict[Key1] = ValZ1 thay vì những gì tôi đang có được, đó là dict[Key1] = (ValX1, ValY1, ValZ1) mà không phải là callable ...

Bất cứ lời khuyên?

Trả lời

7

Chỉ cần giữ lập chỉ mục:

>>> D = {"Key1": (1,2,3), "Key2": (4,5,6)} 
>>> D["Key2"][2] 
6 
+0

Tuyệt vời. Chính xác những gì tôi đang tìm kiếm! Cảm ơn. – jsnider

+0

Bạn được chào đón. Cũng đừng quên chấp nhận câu trả lời cho câu hỏi (hộp kiểm bên trái). –

4

Sử dụng tuple giải nén:

for key, (valX, valY, valZ) in dict.iteritems(): 
     ... 

Thường thì mọi người sử dụng

for key, (_, _, valZ) in dict.iteritems(): 
     ... 

nếu họ chỉ quan tâm đến một mục tương ứng của tuple. Nhưng điều này có thể gây ra sự cố nếu bạn sử dụng mô-đun gettext cho các ứng dụng đa ngôn ngữ, vì mô hình này đặt một hàm toàn cầu có tên là _.

Như tuples là không thay đổi, bạn không thể thiết lập chỉ có một mục như

d[key][0] = x 

Bạn phải giải nén đầu tiên:

x, y, z = d[key] 
d[key] = x, newy, z 
+0

Rất hữu ích, cảm ơn bạn! Một vài lựa chọn khác nhau ở đó. Chúc mừng! – jsnider

1

Sử dụng một biểu thức máy phát điện!

Bạn không cần sử dụng lặp lại vì bạn chỉ xem xét các giá trị.

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