zoukankan      html  css  js  c++  java
  • 小甲鱼Python第二十三讲课后习题--025,字典

     
    笔记:
    1、字典是Python中唯一的映射类型
    2、字典包含两个要素:键(key)和值(value)他们是成对出现的,用大括号括起来,多对存在时用逗号隔开。
    3、可以用dict()直接创建字典,如dict1 = dict((('F',70),('i',105),('s',115),('h',104),('C',67))),创建出来的字典dict1的形式为{('F',70),('i',105),('s',115),('h',104),('C',67)}
    4、dict2 = dict(key1 = value1,key2 = value2),则最后的形式为:dict2 = {key2:value2,key1:value1}Python的dict是无序的。
    5、改变字典中的某个值:dict2[key] = 'value',插入的方法类似
     
    测试题:
    0. 当你听到小伙伴们在谈论“映射”、“哈希”、“散列”或者“关系数组”的时候,事实上他们就是在讨论什么呢?
    答:是的,事实上他们就是在讨论我们这一讲介绍的“字典”,都是一个概念!
     
    1. 尝试一下将数据('F': 70, 'C': 67, 'h': 104, 'i': 105, 's': 115)创建为一个字典并访问键 'C' 对应的值?
    方法一:
    aaa=dict((('F',70),("C",67),("h",104),('i',105),('s',115)))
    print(aaa["C"])
    方法二:
    aaa={'F':70,"C":67,"h":104,'i':105,'s':115}
    print(aaa['C'])

    2. 用方括号(“[]”)括起来的数据我们叫列表,那么使用大括号(“{}”)括起来的数据我们就叫字典,对吗?

    答:不对

    例如:

    >>> NotADict = {1,2,3,4,5}
    >>> type(NotADict)
    <class 'set'>

    不难发现,虽然我们用大括号(“{}”)把一些数据括起来了,但由于没有反映出这些数据有映射的关系,所以创建出
    来的不是字典,而是叫’set’的东西,那’set’到底又是啥玩意儿呢?请看第027讲 | 集合:在我的世界里,你就是唯
    一!

    3. 你如何理解有些东西字典做得到,但“万能的”列表却难以实现(臣妾做不到T_T)?

    例如:

    >>> brand = ['李宁','耐克','阿迪达斯','鱼C工作室']
    >>> slogan = ['一切皆有可能','Just do it','Impossible is nothing','让编程改变世界']
    >>> print('鱼C工作室的口号是:',slogan[brand.index('鱼C工作室')])
    鱼C工作室的口号是: 让编程改变世界

    列表brand、slogan的索引和相对的值是没有任何关系的,我们可以看出唯一有联系的就是两个列表间,索引号相同的
    元素是有关系的(品牌对应口号嘛),所以这里我们通过brand.index('鱼C工作室')这样的语句,间接的实现通过品牌
    查找对应的口号的功能。
      
    这确实是一种可实现方法,呃……但用起来呢,多少有些别扭,效率还不高咧。况且Python是以简洁为主,这样子的实
    现肯定是不能让人满意的,所以呢,我们需要有字典这种映射类型的出现:

    >>> dict1 = {'李宁':'一切皆有可能','耐克':'Just do it','阿迪达斯':'Impossible is nothing','鱼C工作室':'让编程改变世界'}
    >>> print('鱼C工作室的口号是:',dict1['鱼C工作室'])
    鱼C工作室的口号是: 让编程改变世界

    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)])
    >>> d = dict({'three':3,'one':1,'two':2})

    是的,他们都在创建字典:a = dict(one=1, two=2, three=3),呃,我是看不出差别啦~

    实际运行效果为:

    >>> a
    {'two': 2, 'three': 3, 'one': 1}
    >>> b
    {'two': 2, 'three': 3, 'one': 1}
    >>> c
    {'two': 2, 'three': 3, 'one': 1}
    >>> d
    {'two': 2, 'three': 3, 'one': 1}

    说明Python的dict()是无序的,即dict的遍历顺序与初始化顺序是不一致的。可以参考:http://book.douban.com/annotation/23775810/
    Python的Dict的用法:http://blog.csdn.net/wangran51/article/details/8440848

    5. 如图,你可以推测出打了马赛克部分的代码吗?

    data.split(',')  

     

    动动手:

    0. 尝试利用字典的特性编写一个通讯录程序吧,功能如图:

    print('|‐‐‐ 欢迎进入通讯录程序 ‐‐‐|')
    print('|‐‐‐ 1:查询联系人资料 ‐‐‐|')
    print('|‐‐‐ 2:插入新的联系人 ‐‐‐|')
    print('|‐‐‐ 3:删除已有联系人 ‐‐‐|')
    print('|‐‐‐ 4:退出通讯录程序 ‐‐‐|')

    contacts = dict()

    while 1:
    instr = int(input(' 请输入相关的指令代码:'))

    if instr == 1:
    name = input('请输入联系人姓名:')
    if name in contacts:
    print(name + ' : ' + contacts[name])
    else:
    print('您输入的姓名不再通讯录中!')

    if instr == 2:
    name = input('请输入联系人姓名:')
    if name in contacts:
    print('您输入的姓名在通讯录中已存在 ‐‐>> ', end='')
    print(name + ' : ' + contacts[name])
    if input('是否修改用户资料(YES/NO):') == 'YES':
    contacts[name] = input('请输入用户联系电话:')
    else:
    contacts[name] = input('请输入用户联系电话:')

    if instr == 3:
    name = input('请输入联系人姓名:')
    if name in contacts:
    del(contacts[name]) # 也可以使用dict.pop()
    else:
    print('您输入的联系人不存在。')

    if instr == 4:
    break

    print('|‐‐‐ 感谢使用通讯录程序 ‐‐‐|')

     
  • 相关阅读:
    如何使用SAP Intelligent Robotic Process Automation自动操作Excel
    OpenSAML 使用引导 IV: 安全特性
    Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
    微服务架构集大成者—Spring Cloud (转载)
    Spring Cloud Eureka 服务注册列表显示 IP 配置问题
    使用 Notification API 开启浏览器桌面提醒
    SignalR 中使用 MessagePack 序列化提高 WebSocket 通信性能
    配置 Nginx 的目录浏览功能
    关于 Nginx 配置 WebSocket 400 问题
    Migrate from ASP.NET Core 2.0 to 2.1
  • 原文地址:https://www.cnblogs.com/jieperhaps/p/9052241.html
Copyright © 2011-2022 走看看