2010-10-09 41 views
59

Tôi đã có một danh sách Python của từ điển, như sau:Kiểm tra xem giá trị đã tồn tại trong danh sách từ điển chưa?

a = [ 
    {'main_color': 'red', 'second_color':'blue'}, 
    {'main_color': 'yellow', 'second_color':'green'}, 
    {'main_color': 'yellow', 'second_color':'blue'}, 
] 

Tôi muốn kiểm tra xem một cuốn từ điển với một chìa khóa/giá trị cụ thể đã tồn tại trong danh sách, như sau:

// is a dict with 'main_color'='red' in the list already? 
// if not: add item 

Trả lời

131

Dưới đây là một cách để làm điều đó:

if not any(d['main_color'] == 'red' for d in a): 
    # does not exist 

phần trong ngoặc là một biểu thức máy phát điện mà trả True cho mỗi dictiona ry có cặp khóa-giá trị bạn đang tìm kiếm, nếu không thì False.


Nếu khóa cũng có thể thiếu mã trên có thể cung cấp cho bạn KeyError. Bạn có thể sửa lỗi này bằng cách sử dụng get và cung cấp giá trị mặc định.

if not any(d.get('main_color', None) == 'red' for d in a): 
    # does not exist 
+1

Rất đẹp. Cảm ơn! – AP257

+0

Cú pháp một lớp tuyệt vời, tôi đã rất khó khăn cho việc này! Tôi tò mò rằng trong tài liệu Python cho thấy chúng ta thực sự có thể đặt hoạt động của 'for' trước 'for' là gì? – sylye

+1

Tôi tìm thấy nó, nó được gọi là List Comprehensions https://docs.python.org/2/whatsnew/2.0.html?highlight=comprehensions – sylye

2

Có lẽ một chức năng cùng những dòng này là những gì bạn đang sau:

def add_unique_to_dict_list(dict_list, key, value): 
    for d in dict_list: 
    if key in d: 
     return d[key] 

    dict_list.append({ key: value }) 
    return value 
4

Có lẽ đây sẽ giúp:

a = [{ 'main_color': 'red', 'second_color':'blue'}, 
    { 'main_color': 'yellow', 'second_color':'green'}, 
    { 'main_color': 'yellow', 'second_color':'blue'}] 

def in_dictlist((key, value), my_dictlist): 
    for this in my_dictlist: 
     if this[key] == value: 
      return this 
    return {} 

print in_dictlist(('main_color','red'), a) 
print in_dictlist(('main_color','pink'), a) 
Các vấn đề liên quan