2004年09月07日 星期二 16:03
复习了一下,字典内部的存储结构通常是不受外界干涉的。这是因为检索时只是按照键值来查找,字典内部可能会采取一些黑箱手段来提高存储和检索效率(如.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
2004年09月07日 星期二 16:21
没必要再生成一个字典呀。使用列表就不会出现一个键值对应多个值的问题了。 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!
Zeuux © 2025
京ICP备05028076号