映射:一种通过名字引用值的数据结构。
字典:它是Python唯一内建的映射类型。
ps:字典是无序的,其键key可以是数字/字符串/元组。
1.键/值之间用冒号(:)隔开,项之间用逗号(,)隔开,整个字典用一对大括号括起来。(空字典就是{})
3.字典的一些基本操作
在字典中检查键的成员资格比在列表中检查值的成员资格更高效。有两点原因:
(1)
键可以是任何不可变类型。这是字典最强大的地方。
(2)
字典中,d[k]=v 指修改关联到键为k上的值为v,或添加新的项到字典d中。
列表中,d[k]=v 指修改索引为k的项的值为v,若不存在索引为k的项,就直接报错了。
5.字典方法
(2) copy(shallow copy/deep copy)
(4) get
(5) has_key
(7) keys和iterkeys
(9) setdefault
(11) values和itervalues
字典:它是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:输出结果

318

被折叠的 条评论
为什么被折叠?



