python基础教程学习笔记四
第四章 字典:当索引不好时
字典的使用,示例代码如下:
#创建字典
>>> names=['alice','beth','cecli','dee-dee','earl']
>>>numbers=['2341','9102','3158','0142','5551']
>>>numbers[names.index('cecli')]
'3158'
创建和使用字典
#创建字典
>>>names=['alice':’2341’,'beth':’9102’]
Dict函数,示例代码
>>>times=[('name','retacn'),('age',32)]
>>> times
[('name','retacn'), ('age', 32)]
>>>d=dict(times)
>>> d
{'age': 32,'name': 'retacn'}
>>>d['name']
'retacn'
也可以通过关键字来创建字典
>>>d=dict(name='gumby',age=42)
>>> d
{'age': 42,'name': 'gumby'}
字典的基本操作
Len(key)
D[index] 指定位置的值
D[index]=value 重新赋值
Del d[index] 删除指定项
Key in d 检查是否包含key项
注:键可以是任何不可变类型
#使用空列表不可以赋值
>>>x=[]
>>>x[42]='retacn'
Traceback (mostrecent call last):
File "<pyshell#13>", line 1,in <module>
x[42]='retacn'
IndexError: listassignment index out of range
#如果想对列表赋值,需要对列表进行初始化
>>>x=[None]*43
>>>x[42]='retacn'
>>>x[42]
'retacn'
#字典可以直接赋值
>>>x={}
>>>x[42]='yue'
>>>x[42]
'yue'
字典实现简单数据库,示例代码如下:
people={
'retacn':{
'phone':18816170000,
'address':'山东省淄博市博山区'
},
'yue':{
'phone':1234567,
'address':'boshan'
}
}
labels={
'phone':'phone number',
'address':'address'
}
name=input('Name:')
request=input('phonenumber(p) or address(a)?')
ifrequest=='p':key='phone'
ifrequest=='a':key='address'
if name inpeople:print("%s's %s is %s." % (name,labels[key],people[name][key]))
程序运行结果如下:
Name:retacn
phone number(p)or address(a)?p
retacn's phonenumber is 18816170000.
字典的格式化字符串,示例代码如下:
>>>phonebook={'retacn':'123456','yue':'654321'}
>>>"retacn'sphone number is %(retacn)s." %phonebook
"retacn'sphone number is 123456."
字典的方法
clear清除字典中的所有项,示例代码:
>>>d={}
>>>d['name']='retacn'
>>>d['age']=32
>>> d
{'age': 32,'name': 'retacn'}
>>>returned_value=d.clear()
>>> d
{}
>>>print (returned_value)
None
注:如果被清空字典与其他字典关联,在清空后,关联字典也会被清空
复制和深度复制
>>>x={'username':'retacn','interest':['music','football']}
>>>y=x.copy()
>>> x
{'username':'retacn', 'interest': ['music', 'football']}
>>> y
{'username':'retacn', 'interest': ['music', 'football']}
>>>y['username']='yue'
#remove是一个原位置修改方法
>>>y['interest'].remove('football')
>>> x
{'username':'retacn', 'interest': ['music']}
>>> y
{'username':'yue', 'interest': ['music']}
注,在指定键重新赋值 的时候字典不受影响,但是在修改后,原始字典也会改变
>>>from copy import deepcopy
>>>d={}
>>>d['names']=['retacn','yue']
>>>c=d.copy()
>>>dc=deepcopy(d)
>>> d['names'].append('three')
>>> d
{'names':['retacn', 'yue', 'three']}
>>> c
{'names':['retacn', 'yue', 'three']}
>>> dc
{'names':['retacn', 'yue']}
Fromkeys使用给定的键创建新字典
>>>{}.fromkeys(['name','age'])
{'age': None,'name': None}
>>>dict.fromkeys(['name','age'])
{'age': None,'name': None}
#设置默认值
>>>dict.fromkeys(['name','age'],'(unknow)')
{'age':'(unknow)', 'name': '(unknow)'}
Get访问字典项的方法
>>>d={}
>>>print(d['name'])
Traceback (mostrecent call last):
File "<pyshell#63>", line 1,in <module>
print(d['name'])
KeyError: 'name'
>>>print (d.get('name'))
None
>>>d.get('name','N/A')
'N/A'
>>>d['name']='retacn'
>>>d.get('name')
'retacn'
Has_key检查字典中是否有给出的键,python3.0中没有此函数
>>>d={}
>>>d.has_key('name')
Traceback (mostrecent call last):
File "<pyshell#70>", line 1,in <module>
d.has_key('name')
AttributeError:'dict' object has no attribute 'has_key'
Items和iteritems字典项以列表形式返回
Keys和iterkeys字典中键以列表形式返回
Pop 取得对应键值,该项从字典中移除
Popitem 弹出随机的项
Setdefault 取得给定键所对应的值,
Update利用一个字典项更新另一个字典
Values 和 itervalues以列表形式返回字典中的值