p******r 发帖数: 122 | 1 如何让python dictionary sorting 的速度变得很快?
要sort 一些 python dictionary , 找出 value 最大的key, 一个 dictionary 的长度
大概有 300,000 。 然后发现速度奇慢。真的不是一点的慢。
代码用的这个:
max(stats.iteritems(), key=operator.itemgetter(1))[0]
问一下怎样能 speed up? |
p***o 发帖数: 1252 | 2 sortedcontainers.SortedDict
【在 p******r 的大作中提到】 : 如何让python dictionary sorting 的速度变得很快? : 要sort 一些 python dictionary , 找出 value 最大的key, 一个 dictionary 的长度 : 大概有 300,000 。 然后发现速度奇慢。真的不是一点的慢。 : 代码用的这个: : max(stats.iteritems(), key=operator.itemgetter(1))[0] : 问一下怎样能 speed up?
|
p******r 发帖数: 122 | 3 多谢。另外,你觉得300,000长 的 dictionary 找最大值很慢,正常吗?感觉计算机不
会这么慢。你觉得?
【在 p***o 的大作中提到】 : sortedcontainers.SortedDict
|
p***o 发帖数: 1252 | 4 还是先学一门数据结构的课再来讨论这个问题吧。
【在 p******r 的大作中提到】 : 多谢。另外,你觉得300,000长 的 dictionary 找最大值很慢,正常吗?感觉计算机不 : 会这么慢。你觉得?
|
p******r 发帖数: 122 | 5 多谢。推荐本数据结构的书吧!还有要解决这个问题看哪一部分呢?
【在 p***o 的大作中提到】 : 还是先学一门数据结构的课再来讨论这个问题吧。
|
p***o 发帖数: 1252 | 6 书随便,你网上搜哈希表和二叉树就行。
【在 p******r 的大作中提到】 : 多谢。推荐本数据结构的书吧!还有要解决这个问题看哪一部分呢?
|
w********m 发帖数: 1137 | 7 O(2N)
max_value = max(stats.values())
for k, v in stats.items():
if v == max_value:
print(k) |
A*******e 发帖数: 2419 | 8 笨办法,一趟扫描就够了
不过30万的容器找最大,怎么可能非常慢。肯定有别的原因
【在 w********m 的大作中提到】 : O(2N) : max_value = max(stats.values()) : for k, v in stats.items(): : if v == max_value: : print(k)
|
|
s*****V 发帖数: 21731 | 9 sort 最快就是O(nlogn),只找最大值O(n)就可以。
【在 p******r 的大作中提到】 : 如何让python dictionary sorting 的速度变得很快? : 要sort 一些 python dictionary , 找出 value 最大的key, 一个 dictionary 的长度 : 大概有 300,000 。 然后发现速度奇慢。真的不是一点的慢。 : 代码用的这个: : max(stats.iteritems(), key=operator.itemgetter(1))[0] : 问一下怎样能 speed up?
|
n****l 发帖数: 1739 | 10 不能比这个代码更简练了, 3百万都不会“慢”。 找找其他的问题。 另外这个max应
该没有sort。
【在 p******r 的大作中提到】 : 如何让python dictionary sorting 的速度变得很快? : 要sort 一些 python dictionary , 找出 value 最大的key, 一个 dictionary 的长度 : 大概有 300,000 。 然后发现速度奇慢。真的不是一点的慢。 : 代码用的这个: : max(stats.iteritems(), key=operator.itemgetter(1))[0] : 问一下怎样能 speed up?
|
p******r 发帖数: 122 | 11 多谢。我也觉得是有别的原因。可能是数据什么的原因吧。我再去看看。
【在 n****l 的大作中提到】 : 不能比这个代码更简练了, 3百万都不会“慢”。 找找其他的问题。 另外这个max应 : 该没有sort。
|
p******r 发帖数: 122 | 12 刚才写了一个小程序,就测试一个dictionary, 300,000 的,超快:
import operator
a={}
for i in range(300000):
i=i/10
a[i]=i/100
print max(a.iteritems(), key=operator.itemgetter(1))[0]
我觉得我的那个程序,估计数据哪里有问题。
【在 n****l 的大作中提到】 : 不能比这个代码更简练了, 3百万都不会“慢”。 找找其他的问题。 另外这个max应 : 该没有sort。
|