字典概述
如果把一系列值组合成数据结构通过编号访问各个值,列表很好用。除了列表外也可以通过名称来访问各个值的数据结构。这种数据结构叫做映射。字典是python中唯一的内置映射类型。
字典的用途
字典就是能够快速轻松地找到特定的单词(键),以获悉其定义(值)。
创建和使用字典
形如这样就是字典
phonebook={'tom':'1001','jenny':'1002','david':'1003'}
print(phonebook['tom'])
1001
Process finished with exit code 0
字典由键及其相应的值组成,这种键-值对称为项。
在字典中,键必须是独一无二的,而字典的值无需如此。
函数dict
可以使用函数dict从其他键值对序列创建字典。
items = [('name','tom'),('age',41)]
d = dict(items)
print(d)
print(d['name'])
{'name': 'tom', 'age': 41}
tom
Process finished with exit code 0
基本的字典操作
字典的基本行为在很多方面都类似于序列
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查找的是值而不是索引。
examples:
people = { 1111',
'addr':'xinshengdasha'
},
'leesen':{
'phone':'2222',
'addr':'taiyuehefu'
},
'driven':{
'phone':'3333',
'addr':'huayuandonglu'
}
}
lables={
'phone':'phone number',
'addr':'address'
}
name=input('name:')
request= input('phone number(p) or address (a)?')
if request=='p':key='phone'
if request=='a':key='addr'
if name in people:print("{}'s {} is {}.".format(name,lables[key],people[name][key]))
name:jax
phone number(p) or address (a)?a
jax's address is xinshengdasha.
Process finished with exit code 0
字符串格式设置功能用于字典
可使用字符串格式设置功能来设置值的格式,这些值是作为命令或非命名参数提供方法format的。也可以通过字典中存储一些列命名的值,可让格式设置更容易。
phonebook={'tom':'1001','jenny':'1002','david':'1003'}
print("tom's number is {tom}.".format_map(phonebook))
tom's number is 1001.
Process finished with exit code 0
字典的方法
clear
方法clear删除所有的字典项,无法回结果。
d={}
d['name']='tom'
d['age']=18
print(d)
return_value=d.clear()
print(d)
{'name': 'tom', 'age': 18}
{}
Process finished with exit code 0
copy
方法copy返回一个新字典,包含的键值对与原来的字典相同(这个方法是浅复制,因为值本省就是原件,而非副本)
x={'username':'admin','machines':['foo','bar','baz']}
y=x.copy()
y['username']='tom'
y['machines'].remove('bar')
print(y)
print(x)
{'username': 'tom', 'machines': ['foo', 'baz']}
{'username': 'admin', 'machines': ['foo', 'baz']}
Process finished with exit code 0
修改副本的值,原件也将发生变化,因为原件指向的也是被修改的值。
为了避免这个问题,一种方法是深复制,同时复制值和包含的所有值,copy模块中的函数deepcopy
from copy import deepcopy
d = {}
d['name']=['tom','herry']
c=d.copy()
dc=deepcopy(d)
d['name'].append('jerry')
print(c)
print(dc)
{'name': ['tom', 'herry', 'jerry']}
{'name': ['tom', 'herry']}
Process finished with exit code 0
fromkeys
方法fromkeys创建一个新字典,其中包含指定的键,并且每个键对应的值都是None。
print({}.fromkeys(['name','age']))
{'name': None, 'age': None}
Process finished with exit code 0
examples:
print(dict.fromkeys(['name','age']))
{'name': None, 'age': None}
Process finished with exit code 0
get
方法get为访问字典项提供了宽松的环境,通常,如果试图访问字典中没有的项,将会出现语法错误。
example:
d={}
print((d['name']))
print((d['name']))
KeyError: 'name'
example:
d={}
print(d.get('name'))
None
Process finished with exit code 0
example:
people = {
'jax':{
'phone':'1111',
'addr':'xinshengdasha'
},
'leesen':{
'phone':'2222',
'addr':'taiyuehefu'
},
'driven':{
'phone':'3333',
'addr':'huayuandonglu'
}
}
labels={
'phone':'phone number',
'addr':'address'
}
name= input('name:')
request=input('phone number(p) or address(a)')
key=request
if request=='p':key ='phone'
if request=='a':key='addr'
person=people.get(name,{})
label=labels.get(key,key)
result=person.get(key,'not available')
print("{}'s {} is {}.".format(name,label,result))
name:jax
phone number(p) or address(a)f
jax's f is not available.
Process finished with exit code 0
items
方法items返回一个包含所有字典项的列表,其中每个元素都为(key,value)的形式。字典项在列表中的排列顺序不确定。
d={'title':'python web site','url':'www.python.org','language':'py'}
print(d.items())
dict_items([('title', 'python web site'), ('url', 'www.python.org'), ('language', 'py')])
Process finished with exit code 0
keys
方法keys返回一个字典试图,其中包含指定字典中的键。
pop
方法pop可用于获取与指定键相关联的值,并将该键值对从字典中删除。
d={'x':1,'y':2}
d.pop('x')
print(d)
{'y': 2}
Process finished with exit code 0
popitem
方法popitem类似于list.pop,但是list.pop弹出列表中的最后一个元素,而popitem随机地弹出一个字典项,因为字典项的顺序是不确定的,没有最后一个元素的概念。
d={'url':'www.python.org','laguage':'py','title':'python web site'}
d.popitem()
print(d)
{'url': 'www.python.org', 'laguage': 'py'}
Process finished with exit code 0
setdefault
方法setdefault类似get,他也获取与指定键相关联的值,但除此之外,setdefault还在字典不包含指定的键时,在字典中添加指定的键值对。
d={}
d.setdefault('name','none')
print(d)
d['name']='tom'
print(d.setdefault('name','none'))
print(d)
{'name': 'none'}
tom
{'name': 'tom'}
Process finished with exit code 0
update
方法update使用一个字典中的项来个更新另一个字典。
d={
'tile':'python web site',
'url':'www.python.org',
'langeage':'py'
}
x={'title':'python language website'}
d.update(x)
print(d)
{'tile': 'python web site', 'url': 'www.python.org', 'langeage': 'py', 'title': 'python language website'}
Process finished with exit code 0
values
方法values返回一个由字典的值组成的字典视图。不同于方法keys,方法values返回的视图可能包含重复值。
d={}
d[1]=1
d[2]=2
d[3]=3
d[4]=1
print(d.values())
dict_values([1, 2, 3, 1])
Process finished with exit code 0
总结
- 映射:映射能够使用任何不可变的对象来标识其元素。python只有一种内置的映射类型-字典
- 字符串格式设置功能用于字典,要对字典执行字符串格式设施操作,不能使用format和命名参数,而必须使用format_map
- 字典方法。