目录
- 字典的使用
- 创建字典和使用字典
2.1 dict函数
2.2 基本字典操作
2.3 字典的格式化字符串
2.4 字典的方法
- 总结
字典是python中唯一内建的映射类型。字典的值并没有特殊的顺序,但是都是存储在特定的key中。键可以是数字,字符串甚至数组。
1 列表的使用
>>> names=['Alice','Hellen','James','Bob']
>>> numbers=['130584','457113','742348','535212']
>>> numbers[names.index('James')]
'742348'
这样很快就能查到学号了。
2.创建使用字典
创建字典
“`
phonebook={‘Alice’:’130584’,’Hellen’:’457113’,’James’:’742348’,’Bob’:’535212’}
2.1 dict函数使用
(1)创建字典的第一种方式
items=[(‘name’,’WangYu’),(‘age’,’13’)]
d=dict(items)
d
{‘age’: ‘13’, ‘name’: ‘WangYu’}
d[‘name’]
‘WangYu’
(2)第二种方式
d=dict(name=’WangYu’,age=12)
d
{‘age’: 12, ‘name’: ‘WangYu’}
2.2 字典的基本操作
- len(d) 返回d中项(键-值)的数量
- d[k]返回关联到k项上的值
- d[k]=v 将值v关联到键k上
- del d[k]删除键为k的项
- k in d 检查d中是否含有键为k的项
len(d)
2d[‘age’]=43
d
{‘age’: 43, ‘name’: ‘WangYu’}
d[‘name’]=’Venlen’
d
{‘age’: 43, ‘name’: ‘Venlen’}del d[‘name’]
d
{‘age’: 43}‘age’ in d
True
43 in d
False
字典与列表的区别:
1. 键类型:字典的键不一定为整型数据,键可以变换成任意的不可变类型,浮点型,元祖或字符串都可以。
2. 自动添加类型:即使键期初在字典中不存在,也可为它赋值,字典就会建立新的项。在(不使用append方法或者其他操作的情况下)不能将值关联到列表范围之外的索引上。
3. 成员资格型:表达式 k in d 查找 的是键,不是值(上面已演示过了)。表达式 v in l (列表)查找的是值不是键。在字典中检查键是成员资格比在列表中查值的成员资格高效,数据规模越大,两者的效率越明显。
键可以是任意不可改变的数据类型
x=[]
x[42]=’Linux’
Traceback (most recent call last):
File “
```
>>> y={}
>>> y[42]='UNIX'
>>> y
{42: 'UNIX'}
小案例 mini数据库
--以人名作为字典键,每个人用另外一个字典来表示--
people={
‘Alice’:{
‘Addr’:’Nanjing Road 123’,
‘Phone’:’1212144’
},
‘David’:{
‘Addr’:’ Tomas Road 413’,
‘Phone’:’7114502’
},
'Bob':{
'Addr':'Sandforws Road 172',
'Phone':'15352781'
}
}
针对电话和地址做标签
labels={
‘Phone’:’Phone Number’,
‘Addr’:’Address’
}
输入人名和要查询的信息
name=raw_input(‘Name:’)
request=raw_input(‘Phone number(p) or Address(s)?’)
对请求作出判断
if request==’p’:
key=’phone’
if request=’a’:
key=’Addr’
格式化输出信息
if name in people:
print ‘%s’s %s is %s .’% \
(name,lables[key],people[name][key])
2.3 字典的格式化字符串
‘Ben\’s phone number is %(Ben)s’ %phonebook
“Ben’s phone number is 1920”
在每个转换说明符中的%字符后面,可以加上键%(key)s,后面再加上其他说明元素。
2.3 字典使用方法
- clear 清除字典中所有项,没有返回值
d=[]
d={}
d[‘name’]=’ket’
d[‘age’]=’12’
d
{‘age’: ‘12’, ‘name’: ‘ket’}
return_value=d.clear()
d
{}
return_value
print return_value
None
比较下clear的作用
x={}
y=x
x[‘key’]=’admin’
x
{‘key’: ‘admin’}
y
{‘key’: ‘admin’}
x={}
y
{‘key’: ‘admin’}
第二种采用clear()方法
x={}
y=x
x[‘key’]=’123’
y
{‘key’: ‘123’}
x.clear()
y
{}
当使用三个字典时,x,y使用z字典,添加会影响z字典,但是clear()和空都对z字典没有影响,y也不受影响。
2.copy
分为两种,copy和deepcopy。copy是返回一个相同键值的字典,当替换某个键值的时候对原始字典没有影响,但是当修改某个值,原始字典就会受到影响。deepcopy是复制一个字典副本成为原始字典,修改原始的字典不受影响。
3.fromkeys
fromkeys方法使用给定键建立新的字典,每个键对应一个默认的值None.
{}.fromkeys(‘name’,’age’)
{‘a’: ‘age’, ‘e’: ‘age’, ‘m’: ‘age’, ‘n’: ‘age’}
{}.fromkeys([‘name’,’age’])
{‘age’: None, ‘name’: None}
赋值
{}.fromkeys([‘name’,’age’],’(unknown,234)’)
{‘age’: ‘(unknown,234)’, ‘name’: ‘(unknown,234)’}
{}.fromkeys([‘name’,’age’],[‘(unknown)’,’(sdf)’])
{‘age’: [‘(unknown)’, ‘(sdf)’], ‘name’: [‘(unknown)’, ‘(sdf)’]}
{}.fromkeys([‘name’,’age’],’(unknown)’)
{‘age’: ‘(unknown)’, ‘name’: ‘(unknown)’}
4 get
访问字典,查看此键是否存在
d={}
print d.get(‘name’)
None
print d[‘name’]
Traceback (most recent call last):
File “