小甲鱼Python3学习笔记之第二十六讲(仅记录学习)

第二十六讲:字典:当索引不好用时2

一、知识点:

0.字典的一种内建方法:dict.fromkeys(s[,v])

>>> dict1 = {}
>>> dict1.fromkeys((1,2,3))
{1: None, 2: None, 3: None}
>>> dict1.fromkeys((1,2,3),'a')
{1: 'a', 2: 'a', 3: 'a'}
>>> dict1.fromkeys((1,2,3,),('a','b','c'))
{1: ('a', 'b', 'c'), 2: ('a', 'b', 'c'), 3: ('a', 'b', 'c')}
>>> dict1
{}

1.访问字典的方法:

1)dict.keys(),dict.values(),dict.items()(返回每一项)

>>> dict1 = dict1.fromkeys(range(10),'赞')
>>> dict1
{0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞'}
>>> for eachkey in dict1.keys():
	print(eachkey)
>>> for eachvalue in dict1.values():
	print(eachvalue)
>>> for eachitem in dict1.items():
	print(eachitem)

2)dict.get()。当查询的键不存在的话返回一个none,这样程序就不会报错。

3)key in dict。成员操作符查找的是键,不是值。

4)dict.clear()用于清空字典,不建议使用赋空值的方法。dict={}

>>> a = {1:'a'}
>>> b = a
>>> a.clear()
>>> b
{}
>>> a = {1:'a'}
>>> b = a
>>> a = {}
>>> b
{1: 'a'}

5)dict.copy():浅拷贝

>>> a = {1:'a'}
>>> b = a.copy()
>>> c = a
>>> c[2] = 'b'
>>> c
{1: 'a', 2: 'b'}
>>> a
{1: 'a', 2: 'b'}
>>> b
{1: 'a'}

6)dict.pop(key):给定键删除该键,并返回该键的值

7)dict.popitem():随机删除项(包括键和值),并返回该项的值

8)dict.setdefault(key):找得到对应键则返回对应键的值,找不到则创建一个基于该键的项

9)dict.update():根据一个字典或映射关系区更新另一个字典

>>> a
{1: 'a', 2: 'b', 3: None}
>>> b = {4:'d'}
>>> a.update(b)
>>> a
{1: 'a', 2: 'b', 3: None, 4: 'd'}
>>> c = {2:'f'}
>>> a.update(c)
>>> a
{1: 'a', 2: 'f', 3: None, 4: 'd'}

----------------------------------------------------我是一条分割线------------------------------------------------------

 二、课后作业

0.python的字典是否支持一键(key)多值(value)?

答:不支持。

1.在字典中,如果试图为一个不存在的键赋值会怎么样?

答:会自动创建对应的键并赋相应的值。

2.成员资格操作符(in和not in)可以检查一个元素是否存在序列中,当然也可以检查一个键是否存在字典中,那么请问哪种检查效率比较高?为什么?

答:在字典中检查键是否存在比在序列中检查元素是否存在更高效。因为字典的原理采用的哈希算法存储,不需要采用查找算法进行匹配,因此时间复杂度是O(1),效率非常高。

3.python对键(key)和值(value)有没有类型限制?

答:python对键的要求比较严格,要求它们是可哈希(Hash)对象,不能是可变类型(包括变量、列表、字典本身等)。但是python对值是没有限制的,它们可以是任何的python对象。

4.请目测以下代码中执行后,字典dict1的内容是什么?

>>> dict1.fromkeys((1,2,3),('one','two','three'))
>>> dict1.fromkeys((1,3),'数字')

答:执行代码后,字典dict1的内容是{1:'数字',3:'数字'}。

5.你如果需要需要将dict1={1:'one',2:'two',3:'three'}拷贝到dict2,你应该怎么做?

答:dict2 = dict1.copy()

----------------------------------------------------我是一条分割线------------------------------------------------------

三、动动手

0.尝试编写一个用户登录程序(这次尝试将功能封装成函数),程序实现如图:

def load():
    dict1 = {}
    while 1:
        print('----------------------------')
        print('新建用户:N/n')
        print('登录账号:E/e')
        print('推出程序:Q/q')
        key = input('请输入指令代码:')

        if key == 'N' or key == 'n':
            user = input('请输入用户名:')
            while user in dict1:
                user = input('此用户名已经被使用,请重新输入:')
            passwd = input('请输入密码:')
            dict1[user] = passwd
            print('注册成功,赶紧试试登录吧!')
            continue

        elif key == 'E' or key=='e':
            user = input('请输入用户名:')
            while user not in dict1:
                user = input('用户名不存在,请重新输入:')
            passwd = input('请输入密码:')
            while passwd != dict1[user]:
                passwd = input('密码错误,请重新输入:')
            print('欢迎进入系统!')
            break

        elif key == 'Q' or key=='q':
            break

load()

  ----------------------------------------------------我是一条分割线------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/huashu2017/article/details/81061433
今日推荐