2015-04-07 96 views
2

列表返回一個特定的字典。如果我有下面的代碼從類型的字典

attributes = [] 

attributes.append({'attribute': 'noir', 'group': 'coloris', 'id': '8'}) 
attributes.append({'attribute': 's', 'group': 'taille_textile', 'id': '29'}) 
attributes.append({'attribute': 'm', 'group': 'taille_textile', 'id': '24'}) 
attributes.append({'attribute': 'l', 'group': 'taille_textile', 'id': '25'}) 
attributes.append({'attribute': 'xl', 'group': 'taille_textile', 'id': '26'}) 

,我想回到含有一定的ID名單,這將是做到這一點的最好辦法的對象?

我知道,一個解決辦法是使用for循環這樣

def getItemById(id): 
    for i in attributes: 
     for k,v in i.items(): 
      if (k == 'id' and v == id): 
       return i 

我敢肯定,必須有一個更優雅的或有效的方式做到這一點比這等?

這裏有沒有機會使用lambdas?這會給業績帶來好處嗎?

+1

如果你通過'id'訪問,爲什麼把它們放在一個列表中,而不是一個字典** keyed **'id'? – jonrsharpe

+0

http://stackoverflow.com/q/8653516/403554 –

回答

2

例如,要與'id'='29'

返回對象這工作

[x for x in attributes if x['id']=='29'][0] 

{'attribute': 's', 'group': 'taille_textile', 'id': '29'} 
+0

這兩個soloutions都非常好,比我自己好得多,但約翰你更需要丹尼爾的名譽,所以我選擇了你的答案,也是非常整齊,整潔和簡單 –

5

你可以使用一個發電機:

next(attr for attr in attributes if attr['id'] == id_to_find) 
+0

我認爲這是最優雅和pythonic的方式。 :) +1 – Shashank

1

另一種方法是列表轉換爲大熊貓數據幀。

import pandas as pd 
    df = pd.DataFrame(attributes) 

    #get all columns where id=8 
    print df[df['id']=='8'] 

    #get specific column where id=29 
    print df['attribute'][df['id']=='29'] 
相關問題