python中的有序字典

转载 2013年12月05日 12:16:28

转自:http://zoomq.qiniudn.com/ZQScrapBook/ZqFLOSS/data/20111219235951/

Python中的有序字典(OrderedDict)

很早以前就知道的东西,不过刚才看了一下,好像还是有记一下的必要。

问题是这样的:我们都知道Python的字典(dict)是无序的,如果我们希望这个字典有序怎么办?这个功能其实在Python的2.7和3.1里得到了实现,就是OrderedDict。大家可以参考一下这篇PEP:Adding an ordered dictionary to collections。当然,还有Python的官方文档8.3.6. OrderedDict objects由于Python 2.7已经在发布,所以这个问题倒也不是很大。

不过,我现在仍在使用Python 2.6,估计在一个月之内还不会换2.7,那么怎么办呢?像这位老兄一样,自己实现OrderedDict吗?当然,我们也知道,很早以前就有人给出过解答:Python中dict的有序输出(排序)

但其实,还有一个更懒的办法,因为已经有人实现了有序字典,Python Utils 。这个模块里不光实现了OrderedDict类,也实现了其它一些有用的东西,像standout模块也很有用,不过这个不是本文的重点。我们只需要装一下Python Utils,然后读一下文档就行,不需要再自己考虑实现一个有序字典。

PS: gentoo的用户可以直接安装Python Utils模块,运行如下命令即可:

$ emerge pythonutils


django中也自带了一个有序的字典,转自:http://blog.csdn.net/jianhong1990/article/details/8983583

根据名字来理解sorteddict:排序过的字典。它支持按索引来操作字典。

A dictionary that keeps its keys in the order in which they're inserted.

它提供了两个有用的方法

[python] view plaincopy
  1. insert(index, key, value)  
  2. value_for_index(index)  

注意事项:

[python] view plaincopy
  1. d = SortedDict({  
  2.     'b'1,  
  3.     'a'2,  
  4.     'c'3  
  5. })  


上述方法是无效的,sorteddict不知道插入顺序。

下面的方法是有效的:

[python] view plaincopy
  1. from django.utils.datastructures import SortedDict  
  2. d2 = SortedDict()  
  3. d2['b'] = 1  
  4. d2['a'] = 2  
  5. d2['c'] = 3  

最后一个demo:

[python] view plaincopy
  1. from django.utils.datastructures import SortedDict  
  2. d2 = SortedDict()  
  3. d2['b'] = 1  
  4. d2['a'] = 2  
  5. d2['c'] = 3  
  6. print d2  
  7. d2.insert(2,'f',4)  
  8. print d2  
  9. print d2.value_for_index(0)  


输出:

[python] view plaincopy
  1. {'b'1'a'2'c'3}  
  2. {'b'1'a'2'f'4'c'3}  
  3. 1  


 




Python有序字典

一、 defaultdict 使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict: >>> from co...

Python按照书写顺序输出字典中的元素

参考自:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0014110312394...
  • hnyzwtf
  • hnyzwtf
  • 2015年04月22日 14:34
  • 17088

python-4-如何让字典保持有序?

python字典默认是不带有序性的。也就是说其不维护每项进入字典的先后顺序。 解决方法: d= {} d['Jim'] = (1,35) d['Leo'] = (2,37) d['Bob'] = ...

OrderedDict 有序字典以及读取json串时如何保持原有顺序

OrderedDict是dict的子类,它记住了内容添加的顺序。 比较时,OrderedDict要内容和顺序完全相同才会视为相等。 示例: import collections d = collec...
  • yockie
  • yockie
  • 2015年03月04日 21:02
  • 8687

python中的有序字典OrderedDict

1. OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序。 比较时,OrderedDict要内容和顺序完全相同才会视为相等。 ...

如何让字典保持有序

实际案例某编程竞赛系统,对参赛选手编程解题进行计时,选手完成题目后,把该选手解题用时记录到字典中,以便赛后按选手名查询成绩。(答题用时越短,成绩越优。)如: {‘Li’:(1, 29), ‘Jim’...

python 2-6 如何让字典保持有序collections.OrderedDict

2-6 如何让字典保持有序collections.OrderedDict传统字典默认字典在存储完以后不保证存储的顺序 dict1 = {'a':1,'b':2,'c':3} print dict1 ...

python:有序字典与嵌套字典

1. OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序。而普通字典是无序的。 普通字典 >>> import collections >>> d=dic...
  • ztf312
  • ztf312
  • 2016年04月26日 20:30
  • 2043

python 有序字典

#coding=utf-8 #实现一个有序字典类 import bisect class OrderedDict(object): def __init__(self, dictionary =...

在一个集合中存储了无序并且重复的字符串,定义一个方法,让其有序(字典顺序),而且还不能去除重复

package com.prictise; import java.util.ArrayList; import java.util.Comparator; import java.util...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python中的有序字典
举报原因:
原因补充:

(最多只允许输入30个字)