Python - 获取字典列表中的最大值

6

我有一个这样结构的数据集:

In[17]: allIndices
Out[17]: 
[{0: 0, 1: 1.4589, 4: 2.4879},
{0: 1.4589, 1: 0, 2: 2.1547},
{1: 2.1547, 2: 0, 3: 4.2114},
{2: 4.2114, 3: 0},
{0: 2.4879, 4: 0}]

我想要在字典列表中找到最高的值。我的做法如下:
def findMax(data):

    possiblemax = []
    for i in range(len(data)):
        temp = list(data[i].values())
        tempmax = max(temp)
        possiblemax.append(tempmax)

    maxValue = max(possiblemax)
    return maxValue

这个方案可以工作,但是我处理的数据集非常大,速度有点慢。我想知道是否有更好、更快的方法。

非常感谢。


{btsdaf} - Daniel Lenz
2
{btsdaf} - Stefan Pochmann
2
将来请只复制粘贴代码到[SO],不要重新输入。这样你就知道你分享的是你运行的代码。 - Robᵩ
{btsdaf} - Stefan Pochmann
{btsdaf} - Stefan Pochmann
显示剩余5条评论
3个回答

4

我认为一行版本简洁而不失可读性:

my_list = [{0: 0, 1: 1.4589, 4: 2.4879},
           {0: 1.4589, 1: 0, 2: 2.1547},
           {1: 2.1547, 2: 0, 3: 4.2114},
           {2: 4.2114, 3: 0},
           {0: 2.4879, 4: 0}]
print(max(max(part.values()) for part in my_list))

这是Python 3的代码。对于Python 2,请使用dict.itervalues()


{btsdaf} - AntMau
{btsdaf} - Alex Taylor
是的,使用dict.itervalues()更好,但仍然比较慢。而且,选择使用这种语言来完成我的大学毕业项目是我的决定。我想学习如何高效地使用Python :) - AntMau
{btsdaf} - Alex Taylor
我正在使用networkx库中的Dijkstra算法,它返回字典作为输出。您认为在查找最高值之前先将其转换为jumpy数组会更快吗? - AntMau

2

遍历列表中的所有字典;遍历每个字典,获取值。对这些值使用max函数取最大值。使用内置构造函数,让运行时系统尽可能地优化。

在Python 2.7中:

ddd = [{0: 0, 1: 1.4589, 4: 2.4879},
       {0: 1.4589, 1: 0, 2: 2.1547},
       {1: 2.1547, 2: 0, 3: 4.2114},
       {2: 4.2114, 3: 0},
       {0: 2.4879, 4: 0}]

def findMax(data):
    return max(val for item in data for val in item.itervalues())

print "MAX", findMax(ddd)

输出:

MAX 4.2114

{btsdaf} - Prune
@StefanPochmann:谢谢你的鼓励和提到的import问题,但我只是因为思维上的切换而犯了个错误。 - Prune
{btsdaf} - Asav Patel
{btsdaf} - Prune
{btsdaf} - Prune

0
如果你只想遍历列表一次,你可以尝试这样做。
import sys
lo,hi = sys.maxint,-sys.maxint-1

for item in (item.values() for item in allIndices):
    for x in item:
        lo,hi = min(x,lo),max(x,hi)

print hi[0]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接