字典是一种通过名字引用值的数据结构,这类数据结构称为映射。字典是python中唯一內建的映射类型。字典中的值并没有特殊的顺序,但是都存储在一个特定的键 里。键可以是数字,字符串甚至是元组。
4.2 dict函数
可以通过其他映射或者键、值这样的序列对建立字典
>>>item = [('name','Gumby',),('age',42)]
>>>d=dict(items)
>>>d
{'age':42,'name':'Gumby'}
>>>d['name']
'Gumby'
dict 函数可以通过关键字参数建立字典
d=dict(name=’Gumby’,age=42)
d
{‘age’:42,’name’:’Gumby’}
4.2.2 字典基本操作
字典的基本行为在很多方面与序列类似
len(d)返回d中项(键-值对)的数量
d[k]返回关联到键k上的值
d[k]=v将值v关联到键k上
del d[k] 删除键为k的项
k in d 检查d中是否含有键为k的项
字典与列表的区别
键类型:字典的键不一定为整数,也可能是其他不可变类型,如浮点数,字符串或者元组
自动添加:即使那个键起初不存在,也可以为他分配一个值,这样字典就会建立新的项
成员资格:k in d 查找的是键,而不是值。表达式v in l (l为列表)查找的是值,而不是索引。
第一点:键可以为任何不可变类型
>>>x=[]
>>>x[42]='foobar'
报错
程序试图将字符串‘foobar’关联到一个空列表的42号位置上,这不可能,因为这个位置改变不存在。
>>>x={}
>>>x[42] = 'foobar'
>>>x
{42:'foobar'}
将‘foobar’关联到字典的键42上
4,2,3 字典的格式化字符串
>>>phonebook
{'beth':'9102','ceil':'3258'}
>>>"ceil 's phone number is %(ceil)s."%phonebook
"ceil's phone number is 3258"
除了增加的字符串键之外,转换说明符还是一样,只要键能在字典中找到,就可以获得任意数量的转换说明符。
4,2,4 字典方法
1, clear 清除字典中所有的项,这是个原地操作
>>>d={}
>>>d['name']='gumby'
>>>d['age']=42
>>>d
{'age':42,'name':'gumby'}
>>>d.clear()
>>>d
{}
>>>x={}
>>>y=x
>>>x['key']='value'
>>>x={}
>>>y
{'key':'value'}
>>>x={}
>>>y=x
>>>x['key']='value'
>>>x.clear()
>>>y
{}
两种情况中,x ,y起初对应同一个字典。情况一中,通过将x关联到一个新的空字典来“清空”它,这对y一点影响也没有,他还关联到原来的字典。如果想清空原始字典中所有的元素,必须使用clear方法。清况二中,y随后也被清空。
2,copy 返回一个具有相同键值的新字典
>>>x ={'u':'a','m':['f','b','z']}
>>>y=x.copy()
>>>y['u'] = 'mlh'
>>>y['m'].remove('b')
>>>y
{'u':'mlh',',m':['f','z']}
>>>x
x ={'u':'a','m':['f','z']}
即在副本中替换值的时候,原始字典不受影响,修改某个值,原始字典也会改变,为避免这种情况可以使用deepcopy函数
3, fromkeys 使用给定的键建立新的字典,每个键默认对应的值为None
>>>{}.fromkeys(['name','age'])
{'age':None,'name':None}
>>>dict.fromkeys(['name','age'],'(unknown)')
{'age':'(unkonwn)','name':'(unkonwn)'}
4, get
>>>d.get('name',‘N/A’)
‘N/A’
当使用get访问一个不存在的键时,不会有异常发生,得到None值,还可以自定义默认值,替换None,若存在则返回该键值。
5, items和iteritems
items方法将所有的字典项以列表方式返回,但没有特殊顺序
iteritems的作用大致相同,但是会返回一个迭代器对象而不是列表
>>>it =d.iteritems()
>>>it
<dictionary-iterator object at 168050>
>>>list(it) #convert the iterator to a list
6, keys 和 iterkeys
keys 将字典中的键以列表形式返回
iterkeys 返回针对键的迭代器
7, pop 获取给定键的值,然后将这个键对从字典中移除
8,popitem 弹出随机的项
9, update 利用一个字典更新另外一个字典
>>>d={'title':'python','url':'http','chnaged':'mar'}
>>>x={'title':'python'}
>>>d.update(x)
>>>d
{'title':'python','url':'http','chnaged':'mar'}
提供的字典的项会被添加到旧的字典中,若有相同则会进行覆盖
10, values 和 itervalues
values 以列表形式返回字典的值(itervalues返回值的迭代器)