7. Python脚本学习笔记七字典

本文深入探讨Python中的字典数据结构,包括创建、使用方法及各种内置操作,如键值对的增删改查等,适合初学者和进阶读者。

7. Python脚本学习笔记七字典

                  本篇名言:“当你能飞的时候就不要放弃飞,当你能梦的时候就不要放弃梦,当你能爱的时候就不要放弃爱。生命太过短暂,今天放弃了明天就不一定能得到!”

                  列表、字符串和字典是Python中最重要的3中结构,前面已经记录了列表和字符串,那么再来看下字典的使用吧。

                  字典是Python中唯一内建的映射类型。字典中的值没有特殊的顺序,但是都存储在一个特定的键里。键可以是数字、字符串甚至是元组。

 

1.  创建字典

创建字典如下:

 

每个键和它的值之间用冒号隔开,项之间用逗号,整个字典由一对大括号括起来。

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

>>> phonebook

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

2.  字典使用

2.1      字典方法

2.1.1          dict

通过其他映射或者(键,值)建立字典。

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

>>>d=dict(items)

>>> d

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

                  Dict函数也可以通过关键字参数来创建字典,这个是dict函数最有用的功能

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

>>> d

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

 

2.1.2          键类型

键可以为任何不可变类型,是字典最强大地方。如下:

>>> x=[]

>>> x[42]='Foobar'

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

IndexError: list assignment index out ofrange

>>> x={}

>>> x[42]='Foobar'

>>> x

{42: 'Foobar'}

 

看个示例:

# A simple database

 

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

# another dictionary with the keys 'phone' and 'addr' referring totheir phone

# number and address, respectively.

 

people = {

 

    'Alice': {

        'phone': '2341',

        'addr': 'Foo drive 23'

    },

 

    'Beth': {

        'phone': '9102',

        'addr': 'Bar street42'

    },

 

    'Cecil': {

        'phone': '3158',

        'addr': 'Baz avenue90'

    }

 

}

 

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

# 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

Phonenumber (p) or address (a)? p

Beth's phonenumber is 9102.

 

 

2.1.3          字典格式化

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

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

"Cecil'sphone number is 3258."

 

在%字符后面加上键,再更上说明元素即可。

 

 

2.1.4          字典方法

l  clear

删除字典中所有的项。

>>> d={}

>>> d['name']='Gubmy

>>> d

{'name': 'Gubmy'}

>>> d.clear()

>>> d

{}

 

 

l  copy

返回一个具有相同键-值对的新字典。

这是潜复制,不是副本。

当在副本中替换值时候,原始字典不受影响,但是如果修改了某个值,原始的字典也会影响。可以使用deepcopy函数来进行深复制。

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

>>>y=x.copy()

>>>y['username']='mln'

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

>>> x

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

>>> y

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

采用deepcopy后如下:

>>> from copy import deepcopy

>>> d={}

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

>>> c=d.copy()

>>> dc=deepcopy(d)

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

>>> c

{'names': ['Alfrd', 'Bertrand', 'clive']}

>>> d

{'names': ['Alfrd', 'Bertrand', 'clive']}

>>> dc

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

 

 

 

 

l  Fromkeys

使用给定的键建立新的字典。每个键默认对应的值为None.

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

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

也可以提供默认值如下:

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

{'age': 'ok', 'name': 'ok'}

l  Get

宽松的访问字典的方法。

>>> d={}

>>> print d['name']

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

KeyError: 'name'

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

None

也可以在得不到任何值的时候定义默认值

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

get nothing

看下字典示例2:

# A simple database using get()

 

# Insert database (people) from Listing 4-1 here.

 

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:

key = request # In case the request is neither 'p' nor 'a'

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

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

 

# Use get to provide default values:

person = people.get(name, {})

label = labels.get(key, key)

result = person.get(key, 'not available')

 

print "%s's %s is %s." % (name, label, result)

 

 

 

 

l  Has_key

Has_key方法可以检查字典中是否含有给出的键。相当于kin d.

>>> d={}

>>> d.has_key('name')

False

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

>>> d.has_key('name')

True

l  Items和iteritems

Items方法将所有的字典以列表方式返回,每一项都来自(键,值),返回没有顺序。

这个可以将字典装换为列表。

>>> d={'a':1,'b':2,'c':3}

>>> d.items()

[('a', 1), ('c', 3), ('b', 2)]

而iteritems方法返回一个迭代器对象而不是列表

>>> it=d.iteritems()

>>> it

<dictionary-itemiterator object at0x01DDA660>

>>> list(it)

[('a', 1), ('c', 3), ('b', 2)]

l  Keys和iterkeys

Keys方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器。

 

>>> t=d.keys()

>>> t

['a', 'c', 'b']

>>> t=d.iterkeys()

>>> list(t)

['a', 'c', 'b']

l  Pop

获得对应给定键的值,然后将这个建值移除。

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

>>> d.pop('x')

1

l  Popitem

弹出随机的项。字典是无序的。

l  Setdefault

获得与给定键相关联的值类似get,除此之外,还能设置不含有给定键的建值。

>>> d={'name':'test'}

>>> d.get('name')

'test'

>>> d.setdefault('name')

'test'

>>> d.get('name')

'test'

>>> d.get('namee')

>>> d.setdefault('namee','not')

'not'

>>> d

{'namee': 'not', 'name': 'test'}

本来不存在namee键的,但是setdefault后就存在了。

l  Update

用一个字典项更新另外一个字典项,相同的键会覆盖,不存在则添加。

>>> d={'a':1,'b':2}

>>> c={'a':100}

>>> d.update(c)

>>> d

{'a': 100, 'b': 2}

>>> e={'c':50}

>>> d.update(e)

>>> d

{'a': 100, 'c': 50, 'b': 2}

l  Values和itervalues

Values返回字典中的值,itervalues返回值的迭代器。

>>> d={'1':1,'2':2,'3':3,'4':4}

>>> d.values()

[1, 3, 2, 4]

>>> t=d.itervalues()

>>> t

<dictionary-valueiterator object at0x01DE3360>

>>> list(t)

[1, 3, 2, 4]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值