Python学习之字典

映射:一种通过名字引用值的数据结构。
字典:它是Python唯一内建的映射类型。
ps:字典是无序的,其键key可以是数字/字符串/元组。


1.键/值之间用冒号(:)隔开,项之间用逗号(,)隔开,整个字典用一对大括号括起来。(空字典就是{})

2.dict(seq)函数:seq可以是(键,值)对,映射或者关键字参数

key_value = [('a', 1), ('b', 2)] #(键,值)对
new_dict = dict(key_value)

other_dict = {'a':1, 'b':2} #映射
new_dict = dict(other_dict)

new_dict = dict(a=1, b=2) #关键字参数 注:关键字参数中的关键字不能是表达式,即关键字不能写成'a',会报错:Syntax Error: keyword can't be an expression

3.字典的一些基本操作

len(d)   #返回d中键值对的数量
d[k]     #返回关联到键k上的值
d[k] = v #将值v关联到键k上
del d[k] #删除键为k的项
k in d   #检查d中是否有键为k的项

在字典中检查键的成员资格比在列表中检查值的成员资格更高效。有两点原因:

(1)
键可以是任何不可变类型。这是字典最强大的地方。
(2)
字典中,d[k]=v 指修改关联到键为k上的值为v,或添加新的项到字典d中。
列表中,d[k]=v 指修改索引为k的项的值为v,若不存在索引为k的项,就直接报错了。


4.字典的格式化字符串

data = {'name':'cb', 'age':23}
template = "%(name)s\'s age is %(age)s"  #'前面的\可以不要,我觉得写上舒服点

5.字典方法

(1) clear

#!/usr/bin/env python
#coding:utf-8

#-----------------------------------------------------------------------------------
d = {}
d['name'] = 'cb'
d['age'] = 23

print 'Before call clear(), d is ', d

value = d.clear()
print 'After call clear(), d is ', d
print 'value is ', value 

#BEGIN: 输出结果
'''
Before call clear(), d is  {'age': 23, 'name': 'cb'}
After call clear(), d is  {}
value is  None
'''
#END: 输出结果


#拓展----------------------------------
x = {'name':'cb'}
y = x

print x #输出为{'name':'cb'}
print y #输出为{'name':'cb'}

#aaaa
x = {} #将字典x置为空字典
#aaaa

print x #输出为{}
print y #输出为{'name':'cb'}

#因为x={} 实际上是将一个新的空字典赋给x,并没有改变原来的字典,即y指向的字典。

#将aaaa处的替换为如下语句,其他不做修改
x.clear()
#那么print x   print y   都是{}。clear方法会清空x指向的字典,因y也指向该字典,因此也被清空
#---------------------------------------

#-----------------------------------------------------------------------------------------

(2) copy(shallow copy/deep copy)

Python浅复制与深复制中已经说明


(3) fromkeys

#!/usr/bin/env python
#coding:utf-8

#fromkeys方法用来为给定的键建立新的字典,以下为其语法
'''
Syntax
Following is the syntax for fromkeys() method:

dict.fromkeys(seq[, value]))
Parameters
seq -- This is the list of values which would be used for dictionary keys preparation.

value -- This is optional, if provided then value would be set to this value
'''


d = {}.fromkeys(['name', 'age']) #未指定键关联的值,默认为'None'
print d

#BEGIN:输出结果
'''
{'age': None, 'name': None}
'''
#END:输出结果

#当然,可以指定键关联的值为其他,如'(unknown)'
d = {}.fromkeys(['name', 'age'], '(unknown)') #指定键关联的值为'(unknown)'
#不过,该方法不能为每个键指定单独的值,而是只能为所有键指定一个相同的值。

(4) get

#!/usr/bin/python
#coding:utf-8

#get方法用来访问字典中的项。如果不存在,就返回None。当然可以自定义不存在对应项的返回值。

#------字典中不存在相应项的例子------------
d = {}

print d.get('name')
print d.get('name', 'is not available')

#BEGIN:输出结果
'''
None
is not available
'''
#END:输出结果
#------------------------------------------

#------字典中存在相应项的例子------------

d = {'name':'cb', 'age':23}

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

#BEGIN:输出结果
'''
cb
23
'''
#END:输出结果
#----------------------------------------

(5) has_key  

简单就不写了


(6)items和iteritems

#!/usr/bin/python
#coding:utf-8

#items方法将所有的字典项以列表形式返回;
#iteritems方法与items作用大致相同,但它不返回列表,而是返回一个迭代器对象。

d = {'name':'cb', 'age':23}

print d.items()
#BEGIN:输出结果
'''
[('age', 23), ('name', 'cb')]
'''
#END:输出结果

it = d.iteritems()
print it
print list(it)

#BEGIN:输出结果
'''
<dictionary-itemiterator object at 0x7fa0ff5f5f18>
[('age', 23), ('name', 'cb')]
'''
#END:输出结果

(7) keys和iterkeys

未写,参考(6)(11)


(8) pop、popitem

#!/usr/bin/python
#coding:utf-8

#pop方法用来获取指定键的值,然后将这个键值对从字典中移除。

d = {'name':'cb', 'age':23, 'country':'CHINA'}

d.pop('age') 

print d

#BEGIN:输出结果
'''
{'country': 'CHINA', 'name': 'cb'}
'''
#END:输出结果

#--------------------------------------------------------

#popitem方法:弹出字典中随机项。

d = {'name':'cb', 'age':23, 'country':'CHINA'}

d.popitem()

print d

#BEGIN:输出结果
'''
{'age': 23, 'name': 'cb'}
'''
#END:输出结果

(9) setdefault

简单,没写


(10) update

#!/usr/bin/python
#coding:utf-8

#update方法的作用是以一个字典项去更新另一个字典中的对应项。

d = {'name':'cb', 'age':23, 'country':'CHINA'}
x = {'age':24}

d.update(x)

print d

#BEGIN:输出结果
'''
{'country': 'CHINA', 'age': 24, 'name': 'cb'}
'''
#END:输出结果



#---------如果更新字典中不存在的键值对会怎样呢?--------

y = {'sex':male}

d.update(y)

print d

#BEGIN:输出结果
'''
Traceback (most recent call last):
  File "./dict_func_update.py", line 18, in <module>
    y = {'sex':male}
NameError: name 'male' is not defined
'''
#END:输出结果

#报错,说明只能更新字典中存在的键值对。

(11) values和itervalues

#!/usr/bin/python
#coding:utf-8

#values方法作用是以列表形式返回字典中的值。itervalues返回值的迭代器。


d = {'name':'cb', 'age':23, 'country':'CHINA'}


#-----------使用values-----------------
print d.values()

#BEGIN:输出结果
'''
['CHINA', 23, 'cb']
'''
#END:输出结果

#-----------使用itervalues-------------
print d.itervalues()

print list(d.itervalues())


#BEGIN:输出结果
'''
<dictionary-valueiterator object at 0x7f5bb3779f18>
['CHINA', 23, 'cb']
'''
#END:输出结果

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值