2011-08-16 135 views
0

接下來的是stackoverflow question。 我有以下數據結構:從字典列表中搜索鍵中的值,並返回不同的鍵值

data = [ 
    {'site': 'Stackoverflow', 'id': 1}, 
    {'site': 'Superuser', 'id': 2}, 
    {'site': 'Serverfault', 'id': 3} 
] 

我要搜索所有的「現場」鍵的特定值,並返回該字典的「身份證」的價值。例如,搜索「超級用戶」應該返回2:

>>> print find_id('Superuser') 
2 

當我試圖使用引用的問題的解決方案,我收到了一個錯誤:

>>> if any(d['site'] == 'Superuser' for d in data): print d['Superuser'] 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'd' is not defined 
>>> if any(d['site'] == 'Superuser' for d in data): print data['Superuser'] 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: list indices must be integers, not str 

什麼是這樣做的最Python的方式?

+0

'def find_id(data,name):return next((d ['id'] for d in data if d ['site'] == name),None)' – agf

回答

0

這裏沒有竅門。只要這樣做:

def find_id(data, name): 
    for d in data: 
     if d['site'] == name: 
      return d['id'] 
相關問題