如何按我创建的字典中的日期排序?

时间:2017-02-10 16:29:14

标签: python sorting dictionary

我在一个名为cars.txt的单独文件中创建了一个字典。我的代码的目的是返回字典中的什么并对它们进行排序。我的问题是,现在我的代码只返回make / model,而不是年份,更不用说分类的年份了。谢谢你的帮助。

class Car:
    def __init__(make,model,year):
        self.make=make
        self.year=year

        def set_year(year):
            self.year=year

        def get_year(self):
            return self.year

        def display(self):
            return (self.make, ":" , self.year)

        def __str__(self):
            return self.make + " : " + str(self.model)

        def __lt__(self,other):
            return self.year<other.title

        def __repr__(self):
            return str(self)

def constructDictionary():
    dict = {}
    file = open("cars.txt","r");
    for line in file:
        data = line.split(" ")
        dict[data[0].strip()]=data[1].strip()
    file.close()
    return dict;

def main():
    dict=constructDictionary()
    [value for (key, value) in sorted(dict.items())]
    aList=dict
    print(aList)
main()

2 个答案:

答案 0 :(得分:1)

以下行没有在您的代码中执行任何操作:

[value for (key, value) in sorted(dict.items())]

这是一个列表解析,用于构建列表,并返回一个列表。如果您将main更改为

def main():
    dict=constructDictionary()
    alist = [value for (key, value) in sorted(dict.items())]
    print(aList)

然后您的代码将打印一个包含字典值的列表,按键排序。它将按字典键排序,因为您使用了dict.items(),在排序元组时,sorted将首先比较元组的第一个元素,然后是第二个元素等。

如果要按字典中的值排序,只需将列表推导更改为

即可
alist = list(sorted(dict.values()))

一个提示:Python不是Java。不建议使用getter和setter。如果您对控制不变量或类似的东西不感兴趣,请查看property或仅直接访问变量。

此外,您可以使用context manager

,而不是手动关闭文件

答案 1 :(得分:0)

首先,您需要在某处保存[value for (key, value) in sorted(dict.items())]。其次,如果你想按值排序,只需用dict.values()获取值并对它们进行排序。

如果在排序之前需要对值进行更多处理,可以使用sorted(values, key=somefunction),其中某个函数将是一个处理该值的函数,以便对其进行正确排序,将其转换为整数,例如,这些数值是多年,你想用数字对它们进行排序。