我看过不同的字典排序解决方案并感到困惑。因此,决定在这里问问我自己。
我正在设计一个排队应用程序,优先考虑之前没有参与的人。之后,优先级转到请求的时间。
因此,我有两本字典。一个记录参与次数,另一个记录参与时间。
按一下按钮,我将时间记录在我的第一本字典中如下:
dictionary1[name] = time.time()
它将如下所示:
dictionary1 = {'jessi':time.time(), 'jack':time.time(), 'bob':time.time()}
time.time() 的值是 float 。 第二个字典跟踪有多少参与如下:
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']
Bob 被赋予第一优先级,因为他在字典 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']
关于python - 根据两个字典对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52553208/