2010-10-09 58 views
59

我有字典的Python列表如下:檢查字典列表中是否存在值?

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

我想檢查與特定鍵/值字典中是否已經存在在列表中,如下所示:

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

回答

131

下面是做這件事:

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

括號中的部分是一個生成器表達式爲每個dictiona返回True ry有你正在尋找的鍵值對,否則False


如果該鍵也可以缺少上面的代碼可以給你一個KeyError。您可以通過使用get並提供默認值來解決此問題。

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

很不錯的。謝謝! – AP257 2010-10-09 19:29:37

+0

令人驚歎的單線語法,我一直都很努力!我很好奇,在Python文檔中向我們展示的地方,我們實際上可以在'for'之前放置'for'的操作? – sylye 2017-05-11 11:26:39

+1

我發現它,它被稱爲List Comprehensions https://docs.python.org/2/whatsnew/2.0.html?highlight=comprehensions – sylye 2017-05-12 10:01:38

2

可能沿着這些線路的功能是你追求的:

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

也許這會有所幫助:

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)