Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19912720
  • 博文数量: 679
  • 博客积分: 10495
  • 博客等级: 上将
  • 技术积分: 9308
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-18 10:51
文章分类

全部博文(679)

文章存档

2012年(5)

2011年(38)

2010年(86)

2009年(145)

2008年(170)

2007年(165)

2006年(89)

分类: Python/Ruby

2009-08-16 15:49:01

§4 字典


2009-8-16

磁针石:xurongzhong#gmail.com

博客:oychw.cublog.cn



phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

key具有唯一性

 

函数:

>>> items = [('name', 'Gumby'), ('age', 42)]

>>> d = dict(items)

>>> d

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

>>> d['name']

'Gumby'

 

>>> d = dict(name='Gumby', age=42)

>>> d

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

 

基本操作:

       ? len(d) returns the number of items (key-value pairs) in d.

? d[k] returns the value associated with the key k.

? d[k] = v associates the value v with the key k.

? del d[k] deletes the item with key k.

? k in d checks whether there is an item in d that has the key k.

 

       key可以为不变的类型。

       自动添加

      

       >>> x = {}

>>> x[42] = 'Foobar'

>>> x

{42: 'Foobar'}

 

实例:

 

# A simple database

 

# A dictionary with person names as keys. Each person is represented as

# another dictionary with the keys 'phone' and 'addr' referring to their phone

# number and address, respectively.

 

people = {

 

    'Alice': {

        'phone': '2341',

        'addr': 'Foo drive 23'

    },

 

    'Beth': {

        'phone': '9102',

        'addr': 'Bar street 42'

    },

 

    'Cecil': {

        'phone': '3158',

        'addr': 'Baz avenue 90'

    }

 

}

 

# Descriptive labels for the phone number and address. These will be used

# when printing the output.

labels = {

    'phone': 'phone number',

    'addr': 'address'

}

 

name = raw_input('Name: ')

 

# Are we looking for a phone number or an address?

request = raw_input('Phone number (p) or address (a)? ')

 

# Use the correct key:

if request == 'p': key = 'phone'

if request == 'a': key = 'addr'

 

# Only try to print information if the name is a valid key in

# our dictionary:

if name in people: print "%s's %s is %s." % \

    (name, labels[key], people[name][key])

   

    运行结果:

    Name: Beth

Phone number (p) or address (a)? p

Beth's phone number is 9102.

 

格式化输出:

>>> phonebook

{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}

>>> "Cecil's phone number is %(Cecil)s." % phonebook

"Cecil's phone number is 3258."

 

字典方法:

清除:clear

 

>>> x = {}

>>> y = x

>>> x['key'] = 'value'

>>> y

{'key': 'value'}

>>> x = {}

>>> y

{'key': 'value'}

And here’s the second scenario:

>>> x = {}

>>> y = x

>>> x['key'] = 'value'

>>> y

{'key': 'value'}

>>> x.clear()

>>> y

{}

 

复制:copy

 

>>> 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']}

 

>>> 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']}

 

复制keyfromkeys

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

{'age': None, 'name': None}

 

>>> dict.fromkeys(['name', 'age'], '(unknown)')

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

 

获取:

>>> d = {}

>>> print d['name']

Traceback (most recent call last):

File "", line 1, in ?

KeyError: 'name'

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

None

 

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

'N/A'

 

是否有key

列出值:items and iteritems

列出关键字:keys and iterkeys

取值:pop

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

>>> d.pop('x')

1

>>> d

{'y': 2}

出栈:popitem

       但是没有append

setdefault:设置默认值。

 

更新:update

>>> d = {

'title': 'Python Web Site',

'url': '',

'changed': 'Mar 14 22:09:15 MET 2008'

}

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

>>> d.update(x)

>>> d

{'url': '', 'changed':

'Mar 14 22:09:15 MET 2008', 'title': 'Python Language Website'}

 

 

取值:values and itervalues

 

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