夜光序言:

通常,当人们说出温和话语的时候,行为必然也会自然地反映出温和的态度,于是平和之心的力量也将从中孕育而生。

 

 

 

 

正文:

4.5 字典类型 
4.5.1 目标 

夜光:在程序中经常碰到键值对的问题,即给定一个键值 key,那么它对应的值 value 是什么?
例如一个学生的姓名(key)是什么(value),性别(key)是什么(value)~~

 

目标是掌握这种字典的应用,实现用列表与字典存储一组学生的信息,方便查找。

 

 

 


4.5.2 字典类型 

字典是另一种可变容器模型,且可存储任意类型对象,字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号{}中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }

键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。一个简单的字典实例:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
 print(type(dict))
 结果:
 <class 'dict'>


由此可见字典类型是一个类名称为 dict 的对象类型。

 


1、 访问字典里的值 

把相应的键放入熟悉的方括弧,如下实例:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
 print ("dict['Name']: ", dict['Name'])
 print ("dict['Age']: ", dict['Age'])
 以上实例输出结果:
 dict['Name']: Zara
 dict['Age']: 7
 如果用字典里没有的键访问数据,会输出错误如下:
 dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
 print ("dict['Alice']: ", dict['Alice'])
 以上实例输出结果:
 dict['Zara']:
 Traceback (most recent call last):
  File "test.py", line 4, in <module>
  print "dict['Alice']: ", dict['Alice']
 KeyError: 'Alice'

2、修改字典 

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
 如果一个键值已经存在,那么可以修改它的值
 dict['Age'] = 8
 如果一个键值不存在,那么可以增加
 dict['School'] = "DPS School"
 print ("dict['Age']: ", dict['Age'])
 print ("dict['School']: ", dict['School'])
 以上实例输出结果:
 dict['Age']: 8
 dict['School']: DPS School

 


3、删除字典元素 
 删除一个字典用 del 命令,如下实例:
 dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
 del dict['Name'] # 删除键是'Name'的条目
 dict.clear() # 清空词典所有条目
 del dict # 删除词典

 


4、字典键的特性 

字典值可以没有限制地取任何 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行,两个重要的点需要记住:

(1) 不允许同一个键出现两次,创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:
dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}
 print ("dict['Name']: ", dict['Name'])
 以上实例输出结果:
 dict['Name']: Manni 
(2) 键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行,如下实例:
 dict = {['Name']: 'Zara', 'Age': 7}
 print ("dict['Name']: ", dict['Name'])
 以上实例输出结果:
 Traceback (most recent call last):
  File "test.py", line 3, in <module>
  dict = {['Name']: 'Zara', 'Age': 7}
 TypeError: list objects are unhashable

 


5、函数得到字典的长度 len(dict) 

以下实例展示了 len()函数的使用方法:

dict = {'Name': 'Zara', 'Age': 7}
 print ("Length : " ,len (dict))
 以上实例输出结果为:
 Length : 2

 


6、删除字典 dict 的所有元素 dict.clear() 

以下实例展示了 clear()函数的使用方法:

dict = {'Name': 'Zara', 'Age': 7}
 print ("Start Len : ",len(dict))
 dict.clear()
 print "End Len : ", len(dict))
 以上实例输出结果为:
 Start Len : 2
 End Len : 0

 


7、 获取字典的所有键值函数 dict.keys() 

Python 字典 keys() 函数以列表返回一个字典所有的键,以下实例展示了 keys()函数
的使用方法:

dict = {'Name': 'Zara', 'Age': 7}
 print ("keys : " , dict.keys())
 以上实例输出结果为:
 keys : ['Age', 'Name']

 


8、 dict.getKey(key,default=None) 

Python 字典 get() 函数返回指定键的值,如果值不在字典中返回默认值 None 或者指定
的值,以下实例展示了 get()函数的使用方法:

dict = {'Name': 'Zara', 'Age': 27}
 print ("Value : %s" % dict.get('Age'))
 print ("Value : %s" % dict.get('Sex', "Never"))
 以上实例输出结果为:
 Value : 27
 Value : Never

 


4.5.3 【案例】字典存储学生信息 

1、案例描述 
 使用列表与字典存储学生信息,方便查找,学生信息包括的姓名、性别、年龄。
 2、案例分析 
 一个学生的信息是字典对象,例如:
 {"Name":"张三","Gender":"男","Age":20}
 设计一个列表 st=[],它存储多个学生,每个列表元素是一个学生字典对象,例如:
 st=[{"Name":" 张 三 ","Gender":" 男 ","Age":20},{"Name":" 张 四 ","Gender":" 女
 ","Age":20}]


3、案例代码 
 

# Genius
st=[]
def getStudents():
 global st
 st=[]
 st.append({"Name":"夜光","Gender":"男","Age":1111})
 st.append({"Name": "A", "Gender": "女", "Age": 21})
 st.append({"Name": "B", "Gender": "男", "Age": 22})
def seekStudent(Name):
 for s in st:
 if s["Name"]==Name:
 print(s["Name"], s["Gender"], s["Age"])
 return
 print("没有姓名是",Name,"的学生")
getStudents()
seekStudent("夜光")
seekStudent("C")
结果:
夜光 男 1111
没有姓名是 夜光 的学生