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

标签 python python-3.x list sorting dictionary

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

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

因此,我有两本字典。一个记录参与次数,另一个记录参与时间。

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

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/

相关文章:

python - 按 id 上的排名透视 Pandas 数据框

python - 我怎样才能得到一个字典来生成两个具有相同键的字典

python - 使用 MultiIndex 计算 pandas hub_table 中的小计

python - 计数子串

python - 错误: 'ColumnTransformer' object has no attribute '_n_features'

python - TypeError: object.__new__() 使用继承时不带参数

Python子模块在python 3.7中正确导入但不是3.6

python - 下载文件之前如何从链接获取文件名?

CSS - Firefox 和 IE 浏览器不采用给定的固定宽度

python - 在 Python 中重新排序列表以确保它以检查值开头