2014-01-20 36 views
1

的名單得到一本字典的數據考慮以下List of Dictionaries(從數據庫中檢索):如何從字典

education = [{ 
    "schools" : "Nelson Mandela Metropolitan University", 
    "studied_from" : new Date("16/1/2012 02:00:00"), 
    "studied_to" : new Date("25/1/2055 02:00:00"), 
    "qualifications" : " National Diploma", 
    "fields_of_study" : "Industrial engineering" 
    }, { 
    "schools" : "Massachusetts Institute of Technology", 
    "studied_from" : new Date("16/1/2009 02:00:00"), 
    "studied_to" : new Date("25/1/2020 02:00:00"), 
    "qualifications" : "B Tech", 
    "fields_of_study" : "Information Technology" 
    }] 

我試圖從一個dict要返回獲得的數據。
我曾嘗試以下:

for edu in context.education: 
     studied_to.append(edu.studied_to) 
     qualification = edu.qualifications 
     fields_of_study = edu.fields_of_study 
     school = edu.schools 
     recent = max(studied_to) 
    if recent: 
     print recent 
     print qualification 
     print fields_of_study 

這是行不通的,因爲它總是返回在最後dict的數據數據, 我也試過把if-statementfor循環內部,但這並沒有工作或者如果它運行所有條目。

我最終希望使用這些值在HTML頁面上生成。

+0

您已經有了一種正確的數據存儲方式,可以使用哪種格式轉換數據。您可以直接循環訪問列表,並獲取用於生成html文件的鍵和值。 –

+0

你可以使用教育[-1]' –

+0

教育[-1]可能並不總是如此,如果列表不正確。 –

回答

6

不幸的是,你的代碼毫無意義。您似乎將一些變量附加到列表中,並使用最新版本重新定義其他變量,而沒有實際返回所需的字典。

看來不過,你實際上跟隨的是最大「studying_to」值的字典。所以,你應該只是max用鑰匙替換所有的代碼:

most_recent = max(education, key=lambda s: s['studied_to']) 

(另外,不要請嘗試和後期有效語法爲您所使用的語言中的第一個片段似乎是使用Javascript,而不是Python )

+0

我會接受你的答案,因爲它是最有用的解決方案(http://stackoverflow.com/a/21237044/2173793),謝謝 – Renier

1

我認爲你正在嘗試獲取最新教育的數據。您應該使用變量來保存迄今爲止的最新日期,並將其與列表中的條目進行比較。看到這個作爲參考:

max_date = None 

for edu in education: 
    # this line is for initialization 
    if max_date is None: 
     max_date = edu["studied_to"] 

    # check if we have a recent entry at hand 
    if max_date <= edu["studied_to"]: 
     max_date = edu["studied_to"] 
     qualification = edu["qualifications"] 
     fields_of_study = edu["fields_of_study"] 

print max_date 
print qualification 
print fields_of_study 
+0

在鍵上使用屬性訪問器('.')一個'dict'將不起作用。 –

+0

噢,你說得對Joel。現在將修復我的代碼。 – tayfun

0

隨着語法的一些修正:

from operator import itemgetter 

from datetime import datetime 

education = [{ 
    "schools" : "Nelson Mandela Metropolitan University", 
    "studied_from" : datetime.strptime("16/1/2012 02:00:00", "%d/%m/%Y %H:%M:%S"), 
    "studied_to" : datetime.strptime("25/1/2055 02:00:00", "%d/%m/%Y %H:%M:%S"), 
    "qualifications" : " National Diploma", 
    "fields_of_study" : "Industrial engineering" 
    }, { 
    "schools" : "Massachusetts Institute of Technology", 
    "studied_from" : datetime.strptime("16/1/2009 02:00:00", "%d/%m/%Y %H:%M:%S"), 
    "studied_to" : datetime.strptime("25/1/2020 02:00:00", "%d/%m/%Y %H:%M:%S"), 
    "qualifications" : "B Tech", 
    "fields_of_study" : "Information Technology" 
    }] 

most_recent = max(education, key=itemgetter('studied_to')) 
0

感謝所有,你的答案是真的很有幫助。我把丹尼爾的答案,修改了它:

edu = sorted(education, key=lambda studied_to: studied_to) 

現在我可以打電話edu[0]以獲取最新的教育價值:

>>> edu[0]["studied_to"] 
datetime.datetime(2055, 1, 25, 2, 0) 
>>> edu[-1]["studied_to"] 
datetime.datetime(2020, 1, 25, 2, 0) 

無論什麼ed[0]將永遠是最新的教育。