基于dict中两个值的Python dict排序

基于dict中两个值的Python dict排序,python,sorting,Python,Sorting,我有一本词典,它是按照 >> dict = {'foo':[20,15],'bar':[10,5],'is':[35,3],'a':[20,10],'word':[50,1]} 我想找到列表值[0]中最高的键和值[1]中最低的键。。(或近似于它)但它让我的大脑完全冻结 所以对于这个例子,期望的结果是 >> 'word':[50,1] 有人建议我应该更清楚地定义我的参数:现在我希望打印[0]值的前10个最高结果,只要第二个值保持在5以下 感谢您抽出时间阅读问题您可以使用

我有一本词典,它是按照

>> dict = {'foo':[20,15],'bar':[10,5],'is':[35,3],'a':[20,10],'word':[50,1]}
我想找到列表值[0]中最高的键和值[1]中最低的键。。(或近似于它)但它让我的大脑完全冻结

所以对于这个例子,期望的结果是

>> 'word':[50,1]
有人建议我应该更清楚地定义我的参数:现在我希望打印[0]值的前10个最高结果,只要第二个值保持在5以下


感谢您抽出时间阅读问题

您可以使用带有正确按键功能的
max
功能:

>>> max(dict.items(),key=lambda x: (x[1][0],-x[1][1]))
('word', [50, 1])
请注意,在这种情况下,
x[1][0]
(最大值)的优先级大于第二优先级,因此对于某些字典,如以下:

>>> dict = { 'foo': [35,5], 'word': [60, 25]}
它将返回:

('word', [60, 25])
您还可以根据值的差异(看起来更接近您想要的值)获取项目:


试试下面的代码。我不确定它是否满足您的所有场景

    dict = {'a': [20, 10], 'word': [50, 1], 'is': [35, 3], 'foo': [20, 15], 'bar': [10, 5]}

    value = max(dict.values())
    b = value[1]
    for each in dict.values():
        if value[0] == each[0] and each[1] < b:
             value = each

    print (dict.keys()[dict.values().index(value)],value)
dict={'a':[20,10],'word':[50,1],'is':[35,3],'foo':[20,15],'bar':[10,5]}
值=最大值(默认值())
b=值[1]
对于每个输入值():
如果值[0]==每个[0]和每个[1]
我认为您提供的信息不够。如果您有这样的dict:
dict={'foo':[20,1],'word':[50,10]}
,那么应该返回哪个元素?很难说,因为它是关于相对差异的,第一个值越高(语料库中的单词),第二个值(与单词相关的文档)就可以越高。最终的目标是寻找一个结果,该结果具有最高[0]和最低[1]。。对不起,我不清楚。我在想,我应该得到其中一个的最大数量(或具有最大的相对距离),然后手动选择一个你可能想要探索的问题和提供的答案。看一看。如果你没有明确定义你的需求,你将无法写任何东西。试图更清楚地了解我在寻找什么。首先,感谢你花时间回答这个问题。我不完全理解max(dict.items(),key=lambda x:(x[1][0]-x[1][1])是如何工作的。。当我在我的语料库上运行它时,它会返回相等的数字(我想这是相对距离最小的)@按按钮-查看
max
的文档-您可以编写任何函数返回您感兴趣的项目,并将其用作
max
的函数,关键函数可用于几个Python内置程序,像排序,和其他标准库函数。@wwii将阅读它,谢谢。(看起来很方便)嘿,首先谢谢你的回答。我试着运行你的答案(在我的程序中,dict被命名为“vergelijkdict”),如果我运行它为:
value=max(vergelijkdict.values())b=vergelijkdict.values()中的每一个的值[1]:如果值[0]==each[0]和each[1]
它给了我一个AttributeError:“dict_values”对象没有属性“index”,我想您使用的是python 3x。在Python3中,dict.values()、dict.keys()、dict.items()返回视图,而不是列表。在所有可能的位置尝试类似list(dict.values())和list(dict.keys())。
    dict = {'a': [20, 10], 'word': [50, 1], 'is': [35, 3], 'foo': [20, 15], 'bar': [10, 5]}

    value = max(dict.values())
    b = value[1]
    for each in dict.values():
        if value[0] == each[0] and each[1] < b:
             value = each

    print (dict.keys()[dict.values().index(value)],value)