Redian新闻
>
如何让python dictionary sorting 的速度变得很快?
avatar
如何让python dictionary sorting 的速度变得很快?# Programming - 葵花宝典
p*r
1
如何让python dictionary sorting 的速度变得很快?
要sort 一些 python dictionary , 找出 value 最大的key, 一个 dictionary 的长度
大概有 300,000 。 然后发现速度奇慢。真的不是一点的慢。
代码用的这个:
max(stats.iteritems(), key=operator.itemgetter(1))[0]
问一下怎样能 speed up?
avatar
p*o
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?

avatar
p*r
3
多谢。另外,你觉得300,000长 的 dictionary 找最大值很慢,正常吗?感觉计算机不
会这么慢。你觉得?

【在 p***o 的大作中提到】
: sortedcontainers.SortedDict
avatar
p*o
4
还是先学一门数据结构的课再来讨论这个问题吧。

【在 p******r 的大作中提到】
: 多谢。另外,你觉得300,000长 的 dictionary 找最大值很慢,正常吗?感觉计算机不
: 会这么慢。你觉得?

avatar
p*r
5
多谢。推荐本数据结构的书吧!还有要解决这个问题看哪一部分呢?

【在 p***o 的大作中提到】
: 还是先学一门数据结构的课再来讨论这个问题吧。
avatar
p*o
6
书随便,你网上搜哈希表和二叉树就行。

【在 p******r 的大作中提到】
: 多谢。推荐本数据结构的书吧!还有要解决这个问题看哪一部分呢?
avatar
w*m
7
O(2N)
max_value = max(stats.values())
for k, v in stats.items():
if v == max_value:
print(k)
avatar
A*e
8
笨办法,一趟扫描就够了
不过30万的容器找最大,怎么可能非常慢。肯定有别的原因

【在 w********m 的大作中提到】
: O(2N)
: max_value = max(stats.values())
: for k, v in stats.items():
: if v == max_value:
: print(k)

avatar
s*V
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?

avatar
n*l
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?

avatar
p*r
11
多谢。我也觉得是有别的原因。可能是数据什么的原因吧。我再去看看。

【在 n****l 的大作中提到】
: 不能比这个代码更简练了, 3百万都不会“慢”。 找找其他的问题。 另外这个max应
: 该没有sort。

avatar
p*r
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。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。