python – 基于两个词典对列表进行排序

我已经查看了用于排序字典的不同解决方案并且感到困惑.因此,决定在这里问问我自己.

我正在设计一个排队应用程序,优先考虑之前没有参与的人.之后,优先级将转到请求的时间.

因此,我有两本词典.一个跟踪参与的数量,另一个跟踪参与的时间.

按一下按钮,我在第一本字典中记录时间如下:

dictionary1[name] = time.time()

它将如下:

dictionary1 = {'jessi':time.time(), 'jack':time.time(), 'bob':time.time()}

time.time()的值是浮点数.
第二本字典记录了以下参与人数:

dictionary2 = {'jack':2 , 'john':1, 'sam': 4}

我希望0参与的人成为排队的首位.在那之后,参与人数较少的人.

通过参与排序后,我想根据提交时间对人进行排序.

我看到许多使用类似的例子:

sorted_dict = sorted(dict['values'], key=lambda k: k['a']['b'])

但是,当字典2中不存在该值时,我收到错误.

在这两个词典中,我希望按照上述标准订购一个列表.该列表应该从dictionary1生成,但是根据dictionary1和dictionary2中的值进行排序.

我怎么处理这个?

编辑:

假如说
dictionary1 = {‘jessi’:10,’jack’:20,’bob’:30}
dictionary2 = {‘jessi’:1,’jack’:2,’john’:1,’sam’:4}
输出应该是:
list = [‘bob’,’jessi’,’jack’]

鲍勃被赋予第一优先权,因为他没有出现在字典2中.

最佳答案 您可以使用返回参与计数和时间元组的键函数对其进行排序:

import time
dictionary1 = {'jessi':time.time()+1, 'jack':time.time(), 'bob':time.time()-1}
dictionary2 = {'jack':2 , 'john':1, 'sam': 4}
print(sorted(dictionary1, key=lambda k: (dictionary2.get(k, 0), dictionary1[k])))

这输出:

['bob', 'jessi', 'jack']
点赞