2011-04-14 41 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,也不要使用内置的类型/函数名称作为变量。