2011-04-14 69 views
4
的列表值

可能重複:
What's the best way to search for a Python dictionary value in a list of dictionaries?Python的 - 在字典

我在形式

my_dict_list = [] 
my_dict_list.append({'text':'first value', 'value':'number 1'}) 
my_dict_list.append({'text':'second value', 'value':'number 2'}) 
my_dict_list.append({'text':'third value', 'value':'number 3'}) 

我也有另一個列表詞典列表形式:

results = ['number 1', 'number 4'] 

如何通過results列表循環檢查值是否在dict,例如,

for r in results: 
    if r in my_dict_list: 
     print "ok" 
+1

請修復您的問題。 1)那不是字典,2)什麼是「價值」? – 2011-04-14 14:56:06

+4

請不要命名列表'dict'或使用內置變量作爲變量名稱。它只是讓事情變得糟糕。 。 。 – JoshAdel 2011-04-14 14:56:29

+0

這只是一個例子,我放在一起不是原來的代碼,但我會爲你解決它。 – John 2011-04-14 14:58:31

回答

5
for r in result: 
    for d in dict: 
    if d['value'] == r: 
     print "ok" 
+7

如果數值多次存在,則不需要多次打印「ok」:'if any(d ['value'] == r for d in dicts):...' – delnan 2011-04-14 15:05:58

1

嗯,你的情況,你的字典變量不是dictionnary,它是3個dictionnaries,含2個鍵(文本和值),每個dictionnary列表。請注意,我認爲這兩個值是一個變量或zthat你忘了周圍的引號(我加了他們在這裏)

[{'text': 'second value', 'value': 'number 2'}, {'text': 'third value', 'value': 'number 3'}, {'text': 'first value', 'value': 'number 1'}] 

如果這是你所期待的,那麼你可以使用類似:

mySetOfValues=set([x['value'] for x in my_dict_list]) 
for r in results: 
    if r in mySetOfValues: 
    print 'ok' 

但是,如果我理解正確,也許你想創建一個將第一個值與數字1關聯的詞典?

3

map(lambda string: any(map(lambda item: item['value'] == string, dict)), results)返回給定的results[True, False]的列表。儘管在這裏使用for更合適,因爲在找到值時可以中斷嵌套循環。 any將通過dict中的所有項目。

另外,請不要調用列表dict,也不要使用內置的類型/函數名稱作爲變量。