2013-08-15 38 views
7
a = {"hello" : "world", "cat":"bat"} 

//Trying to achieve this 
//Form a new dictionary only with keys with "hello" and their values 
b = {"hello" : "world"} 

//This didn't work 

b = dict((key, value) if key == "hello" for (key, value) in a.items()) 

Bất kỳ đề xuất về cách để bao gồm một biểu thức điều kiện trong sự hiểu biết từ điển để quyết định xem liệu quan trọng, giá trị tuple nên được đưa vào từ điển mớibiểu thức có điều kiện bằng Python điển comprehensions

+0

Điều kiện có luôn ở dạng 'key ==" ... "' hoặc bạn đang tìm kiếm giải pháp chung chung hơn? – icktoofay

+0

'if key ==" hello "' không phải là [biểu thức điều kiện] (http://docs.python.org/2/reference/expressions.html#conditional-expressions) và 'dict (...)' không một sự hiểu biết dict. –

+1

'//' không phải là nhận xét python hợp lệ –

Trả lời

16

Di chuyển if ở cuối:

b = dict((key, value) for (key, value) in a.items() if key == "hello") 

bạn thậm chí có thể sử dụng dict-hiểu (dict(...) không phải là một, bạn chỉ cần sử dụng các nhà máy dict trên một biểu thức máy phát điện):

b = { key: value for key, value in a.items() if key == "hello" } 
+0

Đã hoạt động !! Cảm ơn. Nhưng tại sao cú pháp khác nhau cho sự hiểu biết dict so với danh sách comprehensions – user462455

+2

@ user462455: 'dict ((khóa, giá trị) cho ... trong ... if ...)' không phải là một từ điển hiểu; đó là một sự hiểu biết của máy phát điện được truyền cho 'dict', có tác dụng tương tự. Các phiên bản mới hơn của Python có sự hiểu biết từ điển thực với cú pháp '{key: value for ... in ... if ...}'. – icktoofay

8

Bạn không cần phải sử dụng sự hiểu biết từ điển:

>>> a = {"hello" : "world", "cat":"bat"} 
>>> b = {"hello": a["hello"]} 
>>> b 
{'hello': 'world'} 

dict(...) không phải là sự hiểu biết từ điển.

+1

+1 Tôi nghĩ rằng đây là giải pháp tốt nhất cho câu hỏi OP –

+0

sẽ không ngắt nếu không có phím HELLO trong từ điển nguồn? bổ sung có điều kiện? Không? –

+0

@SyedMauzeRehan, Nó sẽ bị hỏng nếu không có phím 'hello'. Bạn có thể sử dụng lệnh này: 'b = {" hello ": a.get ('hello')}' (sẽ trả về '{'hello': None}' nếu không có phím 'hello'). Hoặc sử dụng 'b = {" hello ": a [" hello "]} nếu 'hello' trong một else {}' nếu bạn muốn nhận '{}' trong trường hợp thiếu 'hello'. – falsetru

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