Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5120245
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类: Python/Ruby

2011-02-12 00:52:34

1、Dictionary语法

  • Dictionary由key/value对(称为项目)组成,key和value之间用“:”分割,项目用“,”分割,所有项目用“{}”包括起来
>>> phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
  • Dictionary的key值必须唯一,否则后者会覆盖前者:
>>> phonebook = {'Alice': '2341', 'Alice': '9102', 'Cecil': '3258'}
>>> phonebook
{'Alice': '9102', 'Cecil': '3258'}
  • 使用dict()函数可以从Mapping(如其它的Dictionary)或key/value形式的Sequence创建Dictionary:
>>> items = [('name', 'Gumby'), ('age', 42)]

>>> d = dict(items)

>>> d

{'age': 42, 'name': 'Gumby'}
  • 也可以用keyword参数来创建Dictionary:
>>> d = dict(name='Gumby', age=42)

>>> d

{'age': 42, 'name': 'Gumby'}


2、基本Dictionary操作

  • Dictionary支持Sequence的基本操作,但要注意下面几点:
  • key值可以是任何类型,但必须是不可变类型,如整数、浮点数、String、Tuple
  • 对项目赋值时,如果key值不存在,会新建项目:
>>> x = {}

>>> x[42] = 'Foobar'

>>> x

{42: 'Foobar'}
  • 使用in操作符时,是查找key值,而不是value值

3、使用Dictionary格式化String

  • 转换形式:%(key)type(type是转换类型)
>>> template = '''

%(title)s



%(title)s

%(text)s

''' >>> data = {'title': 'My Home Page', 'text': 'Welcome to my home page!'} >>> print template % data My Home Page

My Home Page

Welcome to my home page!


4、Dictionary方法

(1) clear:移去Dictionary中所有的元素

>>> d = {'age': 42, 'name': 'Gumby'}

>>> d

{'age': 42, 'name': 'Gumby'}

>>> d.clear()

>>> d

{}
  • 注意,d.clear()和d = {}结果相同,但含义不同:后者是指向了一个新的空Dictionary

(2) copy:返回具有相同key/value对的新Dictionary(注意value值是共用的)

>>> x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}

>>> y = x.copy()

>>> y['username'] = 'mlh'

>>> y['machines'].remove('bar')

>>> y

{'username': 'mlh', 'machines': ['foo', 'baz']}

>>> x

{'username': 'admin', 'machines': ['foo', 'baz']}
  • 避免上面问题的方法是对value值也进行拷贝,可以使用copy模块中的deepcopy()函数:
>>> from copy import deepcopy

>>> d = {}

>>> d['names'] = ['Alfred', 'Bertrand']

>>> c = d.copy()

>>> dc = deepcopy(d)

>>> d['names'].append('Clive')

>>> c

{'names': ['Alfred', 'Bertrand', 'Clive']}

>>> dc

{'names': ['Alfred', 'Bertrand']}


(3) fromkeys:根据给定的key值创建新的Dictionary,缺省value值为None

>>> {}.fromkeys(['name', 'age'])

{'age': None, 'name': None}
  • 可以使用Dictionary的Type(后面讲述):dict
>>> dict.fromkeys(['name', 'age'])

{'age': None, 'name': None}
  • 可以指定value的缺省值:
>>> dict.fromkeys(['name', 'age'], '(unknown)')

{'age': '(unknown)', 'name': '(unknown)'}

(4) get:获取项目的value值(不常用)

  • 注意下面的区别:
>>> d = {}

>>> print d['name']

Traceback (most recent call last):

  File "", line 1, in ?

KeyError: 'name'

>>> print d.get('name')

None
  • 可以指定缺省值(缺省是None):
>>> d.get('name', 'N/A')

'N/A'

(5) has_key:检查Dictionary中是否有指定key

>>> d = {}

>>> d.has_key('name')

0

>>> d['name'] = 'Eric'

>>> d.has_key('name')

1

(6) items和iteritems

  • items()以List返回Dictionary中所有项目,每个项目的形式是(key, value):
>>> d = {'title': 'Python Web Site', 'url': '', 'spam': 0}

>>> d.items()

[('url', ''), ('spam', 0), ('title', 'Python Web Site')]
  • iteritems()返回Iterator对象:
>>> d.iteritems()



>>> list(d.iteritems())

[('url', ''), ('spam', 0), ('title', 'Python Web Site')]

(7) keys和iterkeys

>>> d.keys()

['url', 'spam', 'title']

>>> d.iterkeys()



>>> list(d.iterkeys())

['url', 'spam', 'title']

(8) pop:根据指定key返回value,并从Dictionary中移去该项目:

>>> d = {'x': 1, 'y': 2}

>>> d.pop('x')

1

>>> d

{'y': 2}

(9) popitem:从Dictionary中随机弹出一个项目返回(Dictionary中的项目是无序的)

>>> d = {'title': 'Python Web Site', 'url': '', 'spam': 0}

>>> d.popitem()

('url', '')

>>> d

{'spam': 0, 'title': 'Python Web Site'}

(10) setdefault:根据指定的key值,对不在Dictionary的项目设置value值

>>> d = {}

>>> d.setdefault('name', 'N/A')

'N/A'

>>> d

{'name': 'N/A'}

>>> d['name'] = 'Gumby'

>>> d.setdefault('name', 'N/A')

'Gumby'

>>> d

{'name': 'Gumby'}
  • 如果不指定缺省值,则使用None

(11) update:使用另一个Dictionary的项目来更新指定Dictionary

>>> d = {'title': 'Python Web Site', 'url': '', 'changed': 'Mar 14 22:09:15 MET 2005'}

>>> x = {'title': 'Python Language Website'}

>>> d.update(x)

>>> d

{'url': '', 'changed': 'Mar 14 22:09:15 MET 2005', 'title': 'Python Language Website'}

(12) values和itervalues

>>> d.values()

['', 'Mar 14 22:09:15 MET 2005', 'Python Language Website']

>>> d.itervalues()



>>> list(d.itervalues())

阅读(1428) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~