我已经查看了用于排序字典的不同解决方案并且感到困惑.因此,决定在这里问问我自己.
我正在设计一个排队应用程序,优先考虑之前没有参与的人.之后,优先级将转到请求的时间.
因此,我有两本词典.一个跟踪参与的数量,另一个跟踪参与的时间.
按一下按钮,我在第一本字典中记录时间如下:
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']