2014-02-23 167 views
2

如何检查字符串是否在字典中?我试过,但它给了我一个错误,我不能使用字符串索引。如何将字符串与字典元素进行比较?

我的列表是这样的:

o_list = [{'h': 4, 'name': 'a'},{'h': 6, 'name': 'b'},{'h': 1, 'name': 'c'}] 

和我有这个变量来检查它:

min_node = a 

我试着这样说:

for i, elem in enumerate(o_list): 
    if min_node in o_list[i]['name']: 
     return min_node 
    else: 
     return 'error in retrieving min F' 
+3

什么是期望的输出? – NPE

+0

@NPE它应该返回整个节点以最低f的成本,我试图实施Astar搜索算法 –

回答

2

我觉得你的问题是,是一个变量,而不是兵字符串“A”

这项工作

o_list = [{'h': 4, 'name': 'a'},{'h': 6, 'name': 'b'},{'h': 1, 'name': 'c'}] 

min_node = 'a' 

def f(): 
    for i, elem in enumerate(o_list): 
    if min_node == o_list[i]['name']: 
     return min_node 
    else: 
     return 'error in retrieving min F' 

print f() 

但是这将是更优雅做以下

o_list = [{'h': 4, 'name': 'a'},{'h': 6, 'name': 'b'},{'h': 1, 'name': 'c'}] 

min_node = 'a' 

def f(): 
    for elem in o_list: 
    if min_node == elem["name"]: 
     return min_node 
    else: 
     return 'error in retrieving min F' 

print f() 
+0

它不起作用,它返回“检索最小F时出错”。 –

+1

准确更正了我 –

0
if any(min_node in item['name'] for item in o_list): 
    return min_node 
else: 
    return 'error in retrieving min F' 
1

不知道你为什么使用enumerate;下面的代码片段建立了一个名为names名单,而只使用in子句来检查名字是否是在该名单:

In [2]: o_list = [{'h': 4, 'name': 'a'},{'h': 6, 'name': 'b'},{'h': 1, 'name': 'c'}] 

In [3]: names = [item.get('name') for item in o_list] # build list 

In [4]: names # show list contents 
Out[4]: ['a', 'b', 'c'] 

In [5]: 'a' in names 
Out[5]: True 

In [6]: 'z' in names 
Out[6]: False 
相关问题