零基础入门学习Pyhton(23)字典:当索引不好用时

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('感谢使用通讯录程序')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值