2015-09-27 109 views
0

我有一个dictionairy是建设成为Python的字典排序基于两个值的字典

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

我想找到具有最高列表[0]值和最低值[1,3键]。(或者它的一个近似值),但它给了我一个总BRAINFREEZE

所以在这个例子中所期望的结果将是

>> 'word':[50,1] 

有人建议我应该更清楚地界定我PARAMATERS:右现在我期待,只要第二个值仍低于5

感谢您抽出时间来阅读问题

+2

我不认为您提供了足够的信息。如果你有这样的字典,应该返回哪个元素:'dict = {'foo':[20,1],'word':[50,10]}'? – zanderle

+0

很难说,因为它关于相对差异,第一个值越高(语料库中的单词),第二个数值(与单词有关的文档)就越高。最终的目标是寻找具有最低[0]和最低[1]的结果..抱歉不清楚。我想我会得到最高数量的任一(或相对距离最高),然后手动选择一个 –

+0

您可能想探索SO问题[我如何根据Python中的字典值对字典列表排序? ](http://stackoverflow.com/q/72899/2823755)和提供的答案。并看看[排序如何维基](https://wiki.python.org/moin/HowTo/Sorting)。 – wwii

回答

2

可以使用max功能从[0]值打印前10名成绩最高合适的按键功能:

>>> 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]} 

它将回报:

>>> dict = { 'foo': [70,5], 'word': [68,1]} 
>>> max(dict.items(),key=lambda x: (x[1][0]-x[1][1])) 
('word', [68, 1]) 
+0

首先,感谢您花时间回答问题。我没有完全理解max(dict.items(),key = lambda x:(x [1] [0] -x [1] [1]))是如何工作的。当我在我的语料库上运行它时,它返回相同的数字(我认为它有最低的相对距离) –

+1

@按下按钮 - 查看'''max'''的文档 - 您可以编写任何函数来返回您感兴趣的项目并将其用作[key函数](https://wiki.python.org/moin/HowTo/Sorting)作为''''''''',关键函数可以用于几个Python内置函数,比如'''''''''其他标准库函数.. – wwii

+0

@wwii会给它一个读,谢谢。 (它看起来非常方便) –

0

尝试用下面的代码:

('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) 
+0

嘿,首先谢谢你的回答。我试图运行你的答案(在我的程序中字典命名为'vergelijkdict')如果我将它运行为:'value = max(vergelijkdict。值()) B =值[1] 为每个在vergelijkdict.values(): 如果值[0] ==各[0],并且每个[1]

+0

我认为你使用的是python 3x。在python 3中,dict.values(),dict.keys(),dict.items()返回视图,而不是列表。尝试像列表(dict.values())和列表(dict.keys())在所有可能的地方。 – Vineesh