Python中的字典
- Python的字典把这个字称为“键”(key),把其对应的含义称为“值(value)”
- Python的字典在有些地方称为哈希(hash)
- 字典是Python中唯一的映射类型,映射是数学上的一个术语,指两个元素之间元素相互对应的关系
- 映射类型区别于序列类型,序列类型以数组的形式存储,通过索引的方式来获取相应位置的值,一般索引值与对应位置存储的数据是毫无关系的
利用列表索引打印,间接找对应关系
利用字典直接找对应关系
字典特征
1.标志性符号是大括号,{}
2.字典由“键”和“值”共同组成,每一对键值组合称为“项”
3.字典的键必须独一无二,但值则不必,值可以取任何数据类型,但必须是不可变的,如字符串、数或数组
dict()函数
- dict()函数的参数可以是一个序列(但不能是多个)
括号这么多是用元组的形式伪装成一个参数,用列表的形式也可以伪装
创建字典的方法总结
1.关键字等于,键不加引号
a = dict(one = 1, two = 2, three = 3)
2.逗号隔开,键加引号
b = {'one':1,'two':2,'three':3}
3.利用zip()方法找两个迭代对象索引相同的对应关系
d = dict(zip(['one','two','three'],[1,2,3]))
4.dict()函数参数为字典
e = dict({'one':1,'two':2,'three':3})
5.dict()函数参数为序列
f = dict([('two',2),('one',1),('three',3)])
Task
0. 当你听到小伙伴们在谈论“映射”、“哈希”、“散列”或者“关系数组”的时候,事实上他们就是在讨论什么呢?
对应关系,事实上他们就是在讨论我们这一讲介绍的“字典”,都是一个概念!
1. 尝试一下将数据(‘F’: 70, ‘C’: 67, ‘h’: 104, ‘i’: 105, ‘s’: 115)创建为一个字典并访问键 ‘C’ 对应的值?
mydict = {'F': 70, 'C': 67, 'h': 104, 'i': 105, 's': 115}
mydict2 = dict(F = 70, C = 67, h = 104, i = 105, s = 115)
mydict3 = dict(zip(['F','C','h','i','s'],[10,67,104,105,115]))
mydict4 = dict({'F':70,'C':67,'h':104,'i':105,'s':115})
mydict5 = dict([('F',70),('C',67),('h',104),('i',105),('s',115)])
mydict5['C']
2. 用方括号(“[]”)括起来的数据我们叫列表,那么使用大括号(“{}”)括起来的数据我们就叫字典,对吗?
不对虽然我们用大括号(“{}”)把一些数据括起来了,但由于没有反映出这些数据有映射的关系,所以创建出来的不是字典,而是叫’set’的东西
3. 你如何理解有些东西字典做得到,但“万能的”列表却难以实现(臣妾做不到T_T)?
字典有直接对应关系,列表必须通过相同的索引号间接对应
4. 下边这些代码,他们都在执行一样的操作吗?你看得出差别吗?
>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
5.如图,你可以推测出打了马赛克部分的代码吗?
方法一:字符串分割
分析:字符串的分割方法,别学过就忘啦"
data = "1000,小甲鱼,男"
MyDict = {}
# 还记得字符串的分割方法吧,别学过就忘啦^_^
(MyDict['id'], MyDict['name'], MyDict['sex']) = data.split(',')
print("ID: " + MyDict['id'])
print("Name: " + MyDict['name'])
print("Sex " + MyDict['sex'])
方法二:利用索引
data = "1000,小甲鱼,男"
MyDict = {}
(MyDict['id'], MyDict['name'], MyDict['sex']) = list((data[0],data[1],data[2]))
print("ID: " + MyDict['id'])
print("Name: " + MyDict['name'])
print("Sex " + MyDict['sex'])
6.尝试利用字典的特性编写一个通讯录程序吧,功能如图
print('|--- 欢迎进入通讯录程序 ---|')
print('|--- 1:查询联系人资料 ---|')
print('|--- 2:插入新的联系人 ---|')
print('|--- 3:删除已有联系人 ---|')
print('|--- 4:退出通讯录程序 ---|')
info = dict()
while 1:#保证可以循环输入
enter = int(input('请输入相关的指令代码:'))
if enter == 1:
name = input('请输入联系人姓名:')
if name in info:
print(name + ':'+ info[name])
else:
print('您输入的姓名不在通讯录中')
if enter == 2:
name = input('请输入联系人姓名:')
if name not in info:
phonenumber = input('请输入用户联系电话:')
info[name] = phonenumber
else:
print('您输入的姓名在通讯录中已存在 -->>'+ name + ':' + info[name])
define = input('是否要修改用户资料(YES/NO):')
if define == 'YES':
phone = input('请输入用户联系电话:')
info[name] = phone
if enter == 3:
name = input('请输入联系人姓名:')
if name in contacts:
del(contacts[name]) # 也可以使用dict.pop()
else:
print('您输入的联系人不存在。')
if enter == 4:
break
print('感谢使用通讯录程序')