2012-09-11 36 views
11

Làm thế nào để một lập trình viên python kiểm tra xem giá trị của từ điển có phù hợp với điều kiện hay không (lớn hơn 0 trong trường hợp của tôi). Tôi đang tìm cách "pythonic" nhất có hiệu suất tối thiểu.Kiểm tra xem bất kỳ giá trị nào của từ điển có khớp với điều kiện

từ điển của tôi:

pairs = { 'word1':0, 'word2':0, 'word3':2000, 'word4':64, 'word5':0, 'wordn':8 } 

tôi đã sử dụng những phương pháp 2 (khổng lồ?) Cho đến nay.

1:

options = pairs.values() # extract values 
for i in options: 
    if i > 0: 
     return True 
return False 

2:

options = sorted(pairs.items(), key=lambda e: e[1], reverse=True) # rank from max to min 
if options[0][1] > 0: 
    return True 
else: 
    return False 
+0

Bạn chỉ kiểm tra một mục nhập trong từ điển (như văn bản của bạn nói) hoặc tất cả các mục nhập (như mã của bạn đang hoạt động)? – smcg

+0

@smcg: Xin lỗi vì tiếng Anh của tôi. Tôi có nghĩa là tất cả các mục;] – Firebowl2000

Trả lời

20

Bạn có thể sử dụng any[docs]:

>>> pairs = { 'word1':0, 'word2':0, 'word3':2000, 'word4':64, 'word5':0, 'wordn':8 } 
>>> any(v > 0 for v in pairs.itervalues()) 
True 
>>> any(v > 3000 for v in pairs.itervalues()) 
False 

cũng Xem all[docs]:

>>> all(v > 0 for v in pairs.itervalues()) 
False 
>>> all(v < 3000 for v in pairs.itervalues()) 
True 

Vì bạn đang sử dụng Python 2.7, .itervalues() có lẽ là tốt hơn một chút so với .values() vì nó không tạo ra một danh sách mới.

+0

Cảm ơn DSM! Điều đó rất hữu ích. – Firebowl2000

+0

Tôi sẽ đi xa như nói rằng đây là cách _the_ pythonic để làm điều này. –

+0

Tôi thường tự hỏi có bao nhiêu sự khác biệt thực sự là giữa '.values' và' .itervalues' - Sau khi tất cả, bạn không tạo ra các đối tượng mới, chỉ tài liệu tham khảo mới ... Tôi cho rằng nó đáng giá bao nhiêu bộ nhớ tham chiếu python thực sự mất ... (Tôi thường chỉ sử dụng 'giá trị' vì điều đó sẽ không cần phải thay đổi khi tôi chuyển mã của tôi sang py3k ... nhưng có lẽ tôi không nên ...) Câu trả lời hay. Điều này chắc chắn là cách để đi về điều này (+1) – mgilson

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