通过python字典解析和排序datetime对象

通过python字典解析和排序datetime对象,python,string,parsing,datetime,Python,String,Parsing,Datetime,为了确定最早的正确输入,我正在一个更大的python api中处理一块代码 逻辑将正确的玩家id与时间码联系起来: from datetime import datetime import operator check = correct_player if check in roundplayers and check in players: # make str() results [str(datetime.now())] = check

为了确定最早的正确输入,我正在一个更大的python api中处理一块代码

逻辑将正确的玩家id与时间码联系起来:

from datetime import datetime
import operator



check = correct_player

if check in roundplayers and check in players:
        # make str()
        results [str(datetime.now())] = check
        print(results)
else:
        print('Out of player range')
{'2014-01-20 16:43:40.558436':3}

如果不添加str()我会得到如下结果:

sorted_result = sorted(results.iteritems(), key=operator.itemgetter(0), reverse=False)
print(sorted_result)
print ( '%s' ' wins!') % players[sorted_result[0][1]]
(datetime.datetime(2014,1,20,17,23,50820882),5)

该程序完全可以工作,但我觉得比较字符串是一种错误的方法,尽管我可以像这样对它们进行排序:

sorted_result = sorted(results.iteritems(), key=operator.itemgetter(0), reverse=False)
print(sorted_result)
print ( '%s' ' wins!') % players[sorted_result[0][1]]
有什么更好的方法可以在它们进入时对它们进行实时排序? 当前实现的排序函数以字符串形式返回已排序的结果,但我更愿意将所有内容保留在原始结果dict中

编辑:

谢谢Michael和Jornsharpe的帮助

我用了你两个答案的一部分来简化这个讨厌的模块

while len(roundplayers) > 0:


try:
    check = input('Player ID:\n')

except NameError:
            print ('Invalid ID')
except SyntaxError:
            print ('Invalid ID')

if  check in roundplayers and check in players:
        results [time.time()] = check
        del roundplayers[check]

else:
        print('Out of player range')

if len(roundplayers) == 0:
   print ('%s wins!') % players[results[min(results)]]

比较字符串显然是错误的方法,为什么不将
datetime
对象保留为
dict
键呢?您可以比较这些对象以获得
min
值,因此不需要在输入时对它们进行排序:

results[datetime.now()] = check
然后您可以找到赢家:

print("{0} wins!".format(players[results[min(results)]]))

其中
min(results)
是最早的时间,
results[min(results)]
是相应的
id
,而
players[results[min(results)]
是相应的
player

尝试
time.time()
而不是
datetime.now()
。这将为您提供作为unix时间戳浮点值的当前时间戳,这是完全可比较的,并且在比较时比datetime对象的开销小得多。当您需要一些人类可读的输出时,您仍然可以在以后格式化它。

print({}wins!”.format(players[min(**sorted_result**)])
给了我这个错误:KeyError:(datetime.datetime(2014,1,20,17,39,6390508),5)为什么您仍然在创建
sorted_result
?关键是你不需要它;你可以直接从字典里找到
min
键。我错了。我的意思是:
print({0}wins!”.format(players[min(results)])
无论哪种方式,结果dict在没有str()的情况下都是这样的:
{datetime.datetime(2014,1,20,17,39,6390508),5}
和min()不会对它进行排序。对不起,我稍微编辑了一下我的答案。你是说
结果
看起来像
{datetime.datetime(…):5,…}
?您的格式是2元组。
{datetime.datetime(…):5,…}
如您所说。