Python论坛  - 讨论区

标题:Re: [python-chinese] 另外的字典排序问题

2004年09月07日 星期二 16:03

March Liu March.Liu at gmail.com
Tue Sep 7 16:03:12 HKT 2004

复习了一下,字典内部的存储结构通常是不受外界干涉的。这是因为检索时只是按照键值来查找,字典内部可能会采取一些黑箱手段来提高存储和检索效率(如.net
CLR提供了一个重要的字典类型实现:Hashtable,内部使用Hash表处理存储)。所以严格来说,按键序排列并输出一个字典的代码是这样的:

ks = theDict.keys()
ks.sort()
for k in ks:
....print k, theDict[k]

这个问题也许可以这样解决,需要按次数排序时,就生成一个新的字典,其键值为原字典的值,它的值需要注意,因为原字典可能会有多个键的值相同,所以这里会出现多个单词对应一个次数值,所以新字典的值不是一个单词字符串,而应该是一个list,这样,就形成了一个散列表(?)。
如果你感觉这样使用不方便或太低效,也许应该考虑用C/C++代码实现一个在底层支持按数据对排序并输出的数据类型。按唯一字段使用时,它表现为一个字典,按对应的数据字段排序时,它表现为一个散列表。

On Tue, 7 Sep 2004 15:10:10 +0800, Zoom.Quiet <zoomq at infopro.cn> wrote:
> Hollo Wang:
> 
>  最基本的冒泡等等排序方法哪???
> 就拿字典本身来排,每次冒泡到新的字典中就好………………
> 
> /******** [2004-09-07]15:08:56 ; Wang wrote:
> 
> Wang Chao> 现在已经有一个字典,Keys是英文单词,Values是这个单词在文件中出现的次数。
> Wang Chao> 想要给这个字典重新排序,让出现次数最多的单词排第一位,出现次数最少的排最后。
> 
> Wang Chao> 我尝试把字典里的values放入一个list里,在对list排序,但是好像排完也没有什么意义。很多单词的values值一样,就是排完也没有办法把把排序结果应用回原来的字典里。
> 
> Wang Chao> 我能想当的另一个方案是,每个单词和后面的所有词比较,当遇到values比他大的,就改为values更大的单词开始比较,如果到最后都没有比他大的,就把这个词写入新字典里,同时在旧字典里删除自己,但是好像太弱智了点。
> 
> Wang Chao> 不知道还有什么其他更好地解决方案。
> 
> Wang Chao> 谢谢~~~
> 
> Wang Chao> 基础太差,时间又太紧,我问题好多,学得好辛苦 。 :(
> 
> ********************************************/
> 
> --
> Free as in Freedom
> 
> Zoom.Quiet
> 
> #=========================================#
> ]Time is unimportant, only life important![
> #=========================================#
> 
> sender is the Bat!2.12.00
> 
> 
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 



-- 
刘鑫
March.Liu

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年09月07日 星期二 16:21

limodou limodou at gmail.com
Tue Sep 7 16:21:03 HKT 2004

没必要再生成一个字典呀。使用列表就不会出现一个键值对应多个值的问题了。


On Tue, 7 Sep 2004 16:03:12 +0800, March Liu <march.liu at gmail.com> wrote:
> 复习了一下,字典内部的存储结构通常是不受外界干涉的。这是因为检索时只是按照键值来查找,字典内部可能会采取一些黑箱手段来提高存储和检索效率(如.net
> CLR提供了一个重要的字典类型实现:Hashtable,内部使用Hash表处理存储)。所以严格来说,按键序排列并输出一个字典的代码是这样的:
> 
> ks = theDict.keys()
> ks.sort()
> for k in ks:
> ....print k, theDict[k]
> 
> 这个问题也许可以这样解决,需要按次数排序时,就生成一个新的字典,其键值为原字典的值,它的值需要注意,因为原字典可能会有多个键的值相同,所以这里会出现多个单词对应一个次数值,所以新字典的值不是一个单词字符串,而应该是一个list,这样,就形成了一个散列表(?)。
> 如果你感觉这样使用不方便或太低效,也许应该考虑用C/C++代码实现一个在底层支持按数据对排序并输出的数据类型。按唯一字段使用时,它表现为一个字典,按对应的数据字段排序时,它表现为一个散列表。
> 
> On Tue, 7 Sep 2004 15:10:10 +0800, Zoom.Quiet <zoomq at infopro.cn> wrote:
> > Hollo Wang:
> >
> >  最基本的冒泡等等排序方法哪???
> > 就拿字典本身来排,每次冒泡到新的字典中就好………………
> >
> > /******** [2004-09-07]15:08:56 ; Wang wrote:
> >
> > Wang Chao> 现在已经有一个字典,Keys是英文单词,Values是这个单词在文件中出现的次数。
> > Wang Chao> 想要给这个字典重新排序,让出现次数最多的单词排第一位,出现次数最少的排最后。
> >
> > Wang Chao> 我尝试把字典里的values放入一个list里,在对list排序,但是好像排完也没有什么意义。很多单词的values值一样,就是排完也没有办法把把排序结果应用回原来的字典里。
> >
> > Wang Chao> 我能想当的另一个方案是,每个单词和后面的所有词比较,当遇到values比他大的,就改为values更大的单词开始比较,如果到最后都没有比他大的,就把这个词写入新字典里,同时在旧字典里删除自己,但是好像太弱智了点。
> >
> > Wang Chao> 不知道还有什么其他更好地解决方案。
> >
> > Wang Chao> 谢谢~~~
> >
> > Wang Chao> 基础太差,时间又太紧,我问题好多,学得好辛苦 。 :(
> >
> > ********************************************/
> >
> > --
> > Free as in Freedom
> >
> > Zoom.Quiet
> >
> > #=========================================#
> > ]Time is unimportant, only life important![
> > #=========================================#
> >
> > sender is the Bat!2.12.00
> >
> >
> >
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> >
> 
> 
> --
> 刘鑫
> March.Liu
> 
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
> 



-- 
I like python!

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号