2014-02-23 213 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 
相關問題