python,按大小从dict读取键,以绘制它们

python,按大小从dict读取键,以绘制它们,python,dictionary,sorteddictionary,Python,Dictionary,Sorteddictionary,我有一个python dict,它包含未排序的键/值对,其中键是datetime,值是int {"1.12.2015":5, "4.12.2015":3, "2.12.2015":6, ...} 现在,我希望阅读这些键,以及它们的值按日期排序,以便使用pyplot绘制它们 结果应该是: first pair: 1.12.2015 : 5 second: 2.12.2015 : 6 third: 4.12.2015 : 3 问题是,以正确的顺序获取日期和值的最佳方式是什么。如果有一个在Pyt

我有一个python dict,它包含未排序的键/值对,其中键是datetime,值是int

{"1.12.2015":5, "4.12.2015":3, "2.12.2015":6, ...}
现在,我希望阅读这些键,以及它们的值按日期排序,以便使用pyplot绘制它们

结果应该是:

first pair:
1.12.2015 : 5
second: 
2.12.2015 : 6
third:
4.12.2015 : 3

问题是,以正确的顺序获取日期和值的最佳方式是什么。如果有一个在Python2.6中运行的选项,那将是最好的。这或多或少是您想要的吗

data = {"1.12.2015":5, "4.12.2015":3, "2.12.2015":6}

from datetime import datetime

for k,v in sorted([(datetime.strptime(k, '%d.%m.%Y'), v) for k,v in data.iteritems()]):
    print datetime.strftime(k, '%d.%m.%Y'), v

这或多或少是你想要的吗

data = {"1.12.2015":5, "4.12.2015":3, "2.12.2015":6}

from datetime import datetime

for k,v in sorted([(datetime.strptime(k, '%d.%m.%Y'), v) for k,v in data.iteritems()]):
    print datetime.strftime(k, '%d.%m.%Y'), v

使用lambda作为键,将每个键转换为datetime对象:

 from datetime import datetime

d = {"1.12.2015": 5, "4.12.2015": 3, "2.12.2015": 6}

for k in sorted(d, key=lambda x: datetime.strptime(x, "%d.%m.%Y")):
    print(k, d[k])
输出:

1.12.2015 5
2.12.2015 6
4.12.2015 3
根据您的评论,如果您实际上已经有datetime对象,那么您只需简单地排序:

    for k in sorted(d):
        print(k, d[k])

使用lambda作为键,将每个键转换为datetime对象:

 from datetime import datetime

d = {"1.12.2015": 5, "4.12.2015": 3, "2.12.2015": 6}

for k in sorted(d, key=lambda x: datetime.strptime(x, "%d.%m.%Y")):
    print(k, d[k])
输出:

1.12.2015 5
2.12.2015 6
4.12.2015 3
根据您的评论,如果您实际上已经有datetime对象,那么您只需简单地排序:

    for k in sorted(d):
        print(k, d[k])
你可以这样做

dic={"1.12.2015":5, "4.12.2015":3, "2.12.2015":6}
k = sorted(dic, key=lambda d: map(int, d.split('.')))
for i in k:
    print i," : ",dic[i]
干杯

你可以这样做

dic={"1.12.2015":5, "4.12.2015":3, "2.12.2015":6}
k = sorted(dic, key=lambda d: map(int, d.split('.')))
for i in k:
    print i," : ",dic[i]


干杯

@Dylan Lawrence可能重复显示按值排序,但我希望按键排序,或者可以以相同的方式实现?请参阅答案:@Dylan Lawrence可能重复显示按值排序,但我希望按键排序,或者可以以相同的方式实现?请参阅答案:为什么
timestaps=list(dic.keys())
?将时间戳作为参数传递给sorted函数,在print语句中,我们需要将字典剥离为一个仅包含日期的列表,以便进行排序为什么要创建列表或调用.keys?您可以直接在字典上调用sorted,无需创建中间列表或调用.keys。哦,是的,我们只能将字典用作一个iterable,默认情况下,键被视为iterable,谢谢@PadraicCunninghamyep
sorted(dic…
并忘记时间戳为什么
timestaps=list(dic.keys())
?将时间戳作为参数传递给sorted函数,在print语句中,我们需要将字典剥离为仅包含日期的列表,以便进行排序。为什么您必须创建列表或调用.keys?您可以直接在字典上调用sorted,无需创建中间列表或调用.keys。哦,是的,我们c如果仅将字典用作iterable,则默认情况下,键被视为iterable,谢谢@padraickunninghamyep
排序(dic…
忘记时间戳这就是我要找的,tythis无缘无故创建一个列表,强制转换到datetime对象,然后调用datetime.strftime再次创建字符串,我真的不遵循logic@PadraicCunningham for loop+sorted方法是我一直在寻找的不需要像本例中那样强制转换它们,这样可以使实际实现更简洁。@mat,那么您只需要
sorted(d)
sorted(d.items())
,没有理由首先创建一个列表或调用datetime.strftime,如果您正在做任何事情,您可以对datetime对象调用strftime或调用各种方法之一来获取字符串表示形式,您仍然可以
排序((datetime.strptime(k),%d.%m.%Y'),v)表示数据中的k,v()
最糟糕的情况是,我指的是转换为datetime对象,然后调用
datetime.strftime
将其转换回字符串。如果您想使用strftime,通常会在对象上调用它,但是
str(dt\u对象)
也会这样做这就是我要找的,tythis会无缘无故创建一个列表,强制转换到datetime对象,然后调用datetime.strftime再次创建一个字符串,我真的不遵循logic@PadraicCunningham for loop+sorted方法是我一直在寻找的。因为日期存储为datetime对象,所以我不需要d来像本例中那样强制转换它们,从而使实际实现更简洁。@mat,那么您只需要
sorted(d)
sorted(d.items())
,没有理由首先创建一个列表或调用datetime.strftime,如果您正在做任何事情,您可以对datetime对象调用strftime或调用各种方法之一来获取字符串表示形式,您仍然可以
排序((datetime.strptime(k),%d.%m.%Y'),v)表示数据中的k,v()
最糟糕的情况是,我指的是转换为datetime对象,然后调用
datetime.strftime
将其转换回字符串。如果您想使用strftime,通常会在对象上调用它,但
str(dt_对象)
也会这样做