2014-01-20 16 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]将永远是最新的教育。