根据两个字典对列表进行排序

时间:2018-09-28 10:19:15

标签: python python-3.x list sorting dictionary

我研究了不同的字典排序解决方案,并感到困惑。因此,决定在这里问我自己。

我正在设计一个排队应用程序,该程序将以前未参加会议的人员优先考虑。之后,优先级将取决于请求时间。

因此,我有两个字典。一个跟踪参与者的数量,另一个跟踪参与者的时间。

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

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中不存在。

1 个答案:

答案 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']