我研究了不同的字典排序解决方案,并感到困惑。因此,决定在这里问我自己。
我正在设计一个排队应用程序,该程序将以前未参加会议的人员优先考虑。之后,优先级将取决于请求时间。
因此,我有两个字典。一个跟踪参与者的数量,另一个跟踪参与者的时间。
按下按钮,我在第一本字典中记录的时间如下:
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中的值进行排序。
我该如何处理?
编辑:
假设 字典1 = {'jessi':10,'jack':20,'bob':30} dictionary2 = {'jessi':1,'jack':2,'john':1,'sam':4} 输出应为: list = ['bob','jessi','jack']
鲍勃被给予第一优先权,因为他在字典2中不存在。
答案 0 :(得分:6)
您可以使用返回返回参与人数和时间的元组的键函数对其进行排序:
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']