字典

为什么需要字典类型?
>>> list1 = ["name", "age", "gender"]
>>> list2 = ["fentiao", 5, "male"]
>>> zip(list1, list2)   //通过zip内置函数将两个列表结合,help(zip)
[('name', 'fentiao'), ('age', 5), ('gender', 'male')]
>>> list2[0]   //在直接编程时,并不能理解第一个索引表示姓名
'fentiao'
>>> list2[name]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
故字典是python中唯一的映射类型,key-value(哈希表),字典对象是可变的,但key必须用不可变对象。
字典创建
赋值创建字典
d={"key1":"value1","key2":"value2"}

services={"ssh":22,"ftp":[20,21],"http":[80,8080]}

字典

通过工厂函数创建字典

userinfo=dict(user1="123",user2="456",user3="789")

字典

内建方法:fromkeys   #字典中的key有相同的value值,默认为None

dict={}.fromkeys(('username','password'),'westos')

字典

应用案例:

生成多个银行卡号,并初始化密码为"000000" 卡号由 6 位组成, 前 3 位是 610 , 后面的依次是 001, 002, 003...100

代码如下:
#!/usr/bin/env python
#coding:utf-8
cardids=[]
for i in range(1,101):
    a="610%.3d" %(i)

    cardids.append(a)

    #print {}.fromkeys(cardids,"000000")
print {}.fromkeys(cardids,"000000")

字典

字典
分析字典的特性(跟元组和列表比较)
字典不能索引和切片,因为字典是无序的数据类型;
字典不支持重复和连接;
字典支持成员操作符: 判断字典的key值是否在字典中存在; in, not in
字典的增删改查

字典名[key] = value
d.update(a=1, b=2)
d.update({'a':1, 'b',2})
d.setdefault('a', 1)
** 重点: setdefault 和 update方法的不同
通过字典名 [key]=value, 将 key-value 添加到字典中 ;
d['http'] = [80, 8080]

字典
update 方法实现添加: key 存在,覆盖 value 值, 否则,添加
d.update(http=[80,8080])

字典
setdefault 实现添加: key 存在,不覆盖 value 值, 否则,添加
d.setdefault("ftp",22)

字典

字典名[key]=value
d.update({'a':2, 'b':3})
d.update(a=2, b=3)

字典

查看key值;
services.keys()
services.viewkeys() # 给 key 起名字
services.iterkeys() 

字典
查看 value 值
services.values()  
查看key-value键值对;
services.items()

字典
# 查看 key 是否存在 ;
services.has_key('ftpp')
 查看指定 key 对应的 value 值;如果 key 不存在,不报错; 如果存在,返回 value 值;
 services['ftp'] 如果 key 不存在,直接报错;
services.get('ftpp')

字典


d.pop(key)  删除指定 key 的字典元素;

字典
d.popitem() 随机删除字典的 key-value 元素 ;

字典

del d[key]  删除指定 key 的字典元素;
d.clear()   清空字典元素

字典

循环遍历字典
for i,j in services.items():
print i,j
默认情况下遍历字典的 key 值;
for i in services:
    print i

字典

字典应用
应用1: 通过字典实现case语句
目前python不支持case语句;
实现case语句的两种方式:
if...elif...elif...else...
字典实现
应用一
实现四则运算
- 用户分别输入第一个数字,运算操作符,第三个数字;
- 根据用户的运算操作打印出运算结果;

代码如下:

#!/usr/bin/env python
#coding:utf-8
from __future__ import division
num1=input("请输入数字:")
ope=raw_input("请输入操作符:")
num2=input("请输入数字:")
d ={
    "+":num1+num2,
    "-":num1-num2,
    "*":num1*num2,
    "/":num1/num2,
}
if not ope in d:
    print "error operator"
else:
    print d[ope]
字典
字典

应用2:用户管理系统
1.注册新用户
如果注册用户已经存在,则报错;
需要填写信息: name, passwd, gender, email,age;
2.用户登录 要求同之前写的用户登录系统
3.注销用户 用户注销时,需要输入用户名和正确的用户密码
4.显示用户信息 显示系统中存在所有已经注册用户的信息;
5.退出系统