测试题

0. Python的字典是否支持一键(Key)多值(Value)?

答:不支持,对相同的键再次赋值会将上一次的值直接覆盖。

>>> dict1 = {1:'one', 1:'yi'}

>>> dict1[1]

'yi'

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

答:会自动创建对应的键(Key)并添加相应的值(Value)进去。(具体原理可以参考第3题的“扩展阅读”部分)

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

答:在字典中检查键(Key)是否存在比在序列中检查指定元素是否存在更高效。因为字典的原理是使用哈希算法存储,一步到位,不需要使用查找算法进行匹配,因此时间复杂度是O(1),效率非常高。(关于如何使用哈希算法存储的具体原理可以参考第3题的“扩展阅读”部分)

3. Python对键(Key)和值(Value)有没有类型限制?

答:Python对键的要求相对要严格一些,要求它们必须是可哈希(Hash)的对象,不能是可变类型(包括变量、列表、字典本身等)。

但是Python对值是没有任何限制的,它们可以是任意的Python对象。

如果不清楚哈希原理以及字典的存放原理的童鞋,推荐阅读下小甲鱼帮你整理的这篇文章:你知道Python的字典(Dict)是如何存储的吗?(http://bbs.fishc.com/thread-45016-1-1.html)

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

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

>>> dict1.fromkeys((1, 3), '数字')

答:执行完成后,字典dict1的内容是:{1: ‘数字’, 3: ‘数字’}

这里要注意的是,

fromkeys方法是直接创建一个新的字典,不要试图使用它来修改一个原有的字典

,因为它会直接无情的用把整个字典给覆盖掉。

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

答:可以利用字典的copy()方法:dict2 = dict1.copy(),在其他语言转移到Python小伙伴们刚开始可能会习惯性的直接用赋值的方法(dict2 = dict1),这样子做在Python中只是将对象的引用拷贝过去而已。

>>> a = {1:'one', 2:'two', 3:'three'}

>>> b = a.copy()

>>> c = a

>>> c[4] = 'four'

>>> c

{1: 'one', 2: 'two', 3: 'three', 4: 'four'}

>>> a

{1: 'one', 2: 'two', 3: 'three', 4: 'four'}

>>> b

{1: 'one', 2: 'two', 3: 'three'}

动动手

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

def showMenu():

prompt = '''

|--- 新建用户:N/n ---|

|--- 登录账号:E/e ---|

|--- 推出程序:Q/q ---|

|--- 请输入指令代码:'''

print(prompt)

def CreateUser(info):

name = input("请输入用户名:")

while name in info:

name = input("请求创建的用户名已存在,请重新输入:")

password=input("请输入密码:")

info[name]=password

return info

def login(info):

name = input("请输入用户名:")

while name not in info:

name = input("请求登录的用户名不存在,请重新输入:")

while input("请输入密码:")!=info[name]:

print("输入密码错误\n")

print("欢迎进入xx系统")

###主函数

showMenu()

info={}

while 1:

order=input("请输入指令:")

if order.isalpha()==False:

continue

if order=='N'or order=='n':

info=CreateUser(info)

elif order=='E'or order=='e':

login(info)

elif order=='Q'or order == 'q':

break

请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

比序列更加实用的映射类型,Python唯一的一个映射类型就是字典(map呢?),字典也有一个关键符号,就是大括号,跟序列一样,也可以用

dict()这个工厂函数来创建一个字典,跟序列不一样的是,如果在序列中试图为一个不存在的位置去赋值的时候,会报错,会提示该位置并不存在,但如果在字典中,它会自动创建相应的键并添加对应的值。

dict() 是一个工厂函数,实际上是一个类型,调用它会生成一个该类型的实例,此前我们学习了str(),int(),list(),tuple(),这些都是工厂函数(类型),不过在学习类和对象之前,你可以把它们当做普通函数来理解。

1、下面介绍字典的内建方法

fromkeys(…)

用法:dict.fromkeys(S[ ,v]) -> New dict with keys from S and values equal to v(v default to None).

你可以用fromkeys(…)方法创建并返回新的字典,第一个参数S是字典的键值,第二个参数v是可选的键值对应的值,如果第二个参数不提供的话,就是None。

dict1 = {}

dict1.fromkeys((1, 2, 3))

{1: None, 2: None, 3: None}

>>> dict1

{}

可以看出dict1.fromkeys()只是创建新的字典,对原数组无影响:

如果给键对应的值的话:

dict.fromkeys((1, 2, 3), 'number')

{1: 'number', 2: 'number', 3: 'number'}

但是不要指望分别给键对应的值:

>>>dict.fromkeys((1, 2, 3), ('one', 'two', 'three'))

{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}

2、下面介绍访问字典的几个方法

1.keys()、values()、items()

keys()返回字典键的引用,values()返回字典值的引用,items()返回字典项的引用

>>> dict1 = {1:'one', 2:'two', 3:'three', 4:'four', 5:'five'}

>>> dict1.keys()

dict_keys([1, 2, 3, 4, 5])

>>> dict1.values()

dict_values(['one', 'two', 'three', 'four', 'five'])

>>> dict1.items()

dict_items([(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five')])

##

>>> for eachkey in dict1.keys():

print(eachkey, end = ' ')

1 2 3 4 5

#

>>> for eachvalue in dict1.values():

print(eachvalue, end = ' ')

one two three four five

1 2 3 4 5

#

>>> for eachitem in dict1.items():

print(eachitem, end = ' ')

(1, 'one') (2, 'two') (3, 'three') (4, 'four') (5, 'five')

当我们试图访问字典中不存在的项时,就可能会报错:

>>> dict1

{1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five'}

>>> dict1[6]

Traceback (most recent call last):

File "", line 1, in

dict1[6]

KeyError: 6

2.内这样的用户体验就会不好,因此使用get()建函数。

>>> dict1.get(5)

'five'

>>> dict1.get(6)

>>> print(dict1.get(6))

None

也可以在get中为不存在的项输出相应的提示:

>>> dict1.get(6, '不存在')

'不存在'

>>> dict1.get(5, '不存在')

'five'

>>> dict1

{1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five'}

如果不知道一个键是否在字典中(不能查找值),可以使用成员资格操作符来进行判断。in 和 not in

>>> 6 in dict1

False

>>> 5 in dict1

True

>>> 'five' in dict1

False

3.清空一个字典,使用clear()方法。

>>> dict1

{1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five'}

>>> dict1.clear()

>>> dict1

{}

clear()会完全清除整个字典,即使该字典有多个名字对应:

>>> a = {1: 'one'}

>>> b = a

>>> b

{1: 'one'}

>>> a.clear()

>>> a

{}

>>> b

{}

4.copy

#copy()拷贝,区别于赋值:

>>> a = {1: 'one', 2: 'two', 3: 'three'}

>>> b = a.copy()

>>> c = a

>>> a

{1: 'one', 2: 'two', 3: 'three'}

>>> b

{1: 'one', 2: 'two', 3: 'three'}

>>> c

{1: 'one', 2: 'two', 3: 'three'}

>>> id(a) #id() 返回地址,可以发现c和a指向同一个字典

2200132871048

>>> id(b)

2200132857800

>>> id(c)

2200132871048

>>> c[4] = 'four'

>>> a

{1: 'one', 2: 'two', 3: 'three', 4: 'four'}

>>> b

{1: 'one', 2: 'two', 3: 'three'}

>>> c

{1: 'one', 2: 'two', 3: 'three', 4: 'four'}

5.pop()和popitem(),都是弹出字典中的元素。

>>> a = {1: 'one', 2: 'two', 3: 'three', 4: 'four'}

>>> a.pop(2)

'two'

>>> a

{1: 'one', 3: 'three', 4: 'four'}

>>> a = {1: 'one', 2: 'two', 3: 'three', 4: 'four'}

>>> a.popitem()

(1, 'one')

>>> a

{2: 'two', 3: 'three', 4: 'four'}

pop()是弹出对应键的项,返回键对应的值,popitem()是随机从字典弹出项,返回键和值的元组。

## 6.setdefault(key,str)

用法与get()类似,只是如果找不到对应的键,会自动添加,值默认为None,也可以给值。在字典没有key时创建这个key并且把值赋为str

>>> a = {1: 'one', 2: 'two', 3: 'three', 4: 'four'}

>>> a.setdefault(2)

'two'

>>> a.setdefault(5)

>>> a

{1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: None}

>>> a.setdefault(5, 'five')

>>> a

{1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: None}

>>> a.setdefault(6, 'six')

'six'

>>> a

{1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: None, 6: 'six'}

7.update(),用一个字典或映射关系去更新一个字典。

>>> a

{1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: None, 6: 'six'}

>>> b = {2: 'double'}

>>> a.update(b)

>>> a

{1: 'one', 2: 'double', 3: 'three', 4: 'four', 5: None, 6: 'six'}

python对键和值有没有类型限制_第026课:词典:索引不易使用时2,讲,字典,当,不好...相关推荐

  1. 各样本观察值均加同一常数_对色师傅分享:如何使不同观察者在灯箱下观察的色光一致?...

    国际标准光源灯箱分为国产灯箱和进口光源对色灯箱两种,进口光源灯箱价格昂贵,校准度精确度高,主要针对大型企业以及对颜色要求很严格的企业使用:而国产标准对色灯箱价格便宜,适用于大部分小企业. 标准光源灯箱 ...

  2. python 下列表达式的值为true的是_下列表达式的值为True的是 ( )

    [单选题]逻辑运算符两侧运算对象的数据类型( ). [单选题]已知x,y=5,10:则表达式print(x and not y)的输出结果是:( ) [单选题]以下选项中合法的用户标识符是( ) [单 ...

  3. python输入正方形边长值、计算其面积_尝试修改列6.2编写命令行参数解析的程序,解析命令行参数所输入边长的值,计算并输出正方形的周长和面积。_学小易找答案...

    [简答题] [单选题]ZigBee 中每个协调点最多可连接______个节点,一个ZigBee网络最多可容纳______个节点.( ) [资料题]DWord-Ans.pdf 索引和目录.pdf 完成效 ...

  4. python 下列表达式的值为true的是_下列表达式的值为True的是( )。_学小易找答案...

    [简答题] [多选题]Benson将失读症分为( ) [填空题]下列 Python 语句的输出结果是 . print(" 数量 {0}, 单价 {1} ".format(100,2 ...

  5. python 下列表达式的值为true的是_下列表达式的值为True的是

    本题在 Python2 下答案选 C,在 Python3 下全部错误. 选项 A:Python2 与 Python3 均不支持复数比较大小,Python2 中会抛出以下错误: TypeError: n ...

  6. Python布尔值属于数字类型吗?

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 列郡讴歌惜,三朝出入荣. 大家好, ...

  7. python整数类型在每一台计算机上的取值范围是一样的_第四章、Python数据类型

    1.前面第三章有说过了Python有的数据类型,在开始介绍各种数据类型之前,我们先要知道Python的一个内置函数 type() ,用以查询变量所赋值的数据类型. >>> a=1 & ...

  8. python 取出字典的键或者值/如何删除一个字典的键值对/如何遍历字典

    先定义一个字典并直接进行初始化赋值 my_dict = dict(name="lowman", age=45, money=998, hourse=None) 1.取出该字典所有的 ...

  9. python输出键值列表_Python 键值分组或分区数据

    Python 使用键值分组或者分区数据,对分组后的数据做何种归约是没有限制的.数据中可能包含一些自变量或者因变量.可以通过自变量对数据进行分区,然后计算每个分区的各项汇总值,包括最大值.最小值.平均值 ...

最新文章

  1. 解决python 保存json到文件时 中文显示16进制编码的问题
  2. 记事本java代码_java实现Windows记事本(示例代码)
  3. Oracle中过程/函数返回结果集
  4. 微信小程序window的配置
  5. php --魔术常量 /魔术方法
  6. uva 550——Multiplying by Rotation
  7. 【转载保存】lucene3.0可以对docId、docField、queryParser设置Boost值来影响排序结果
  8. 微信小程序教程笔记2
  9. java jar热加载技术_Java热加载(JRebel)与Devtools热部署
  10. 1个鼠标和1个键盘控制2台电脑(windows和linux系统)
  11. 数据结构之数组的存储
  12. 计算机毕业论文答辩教师评语,毕业论文答辩教师评语
  13. dex文件解析(第三篇)
  14. 植物大战僵尸阳光修改
  15. Dynamics CRM 审批流引擎
  16. 菜鸟-需求预测与分仓规划
  17. 眼睛怎么画?怎样才能画好人物的眼睛?
  18. 阿里云RPA(机器人流程自动化)干货系列之五:业务流程梳理方法...
  19. 无关风月怎谈价格:个性化直播源码打造多功能一对一交友、直播程序功能
  20. 信息系统项目管理师(进阶篇)-信息化与信息系统

热门文章

  1. MySQL--REPALCE INTO操作
  2. 数组巧去重new Set
  3. 高程5.7单体内置对象 5.8小结
  4. Winform中创建超链接,点击跳转网页
  5. 自动完成代码,提高工作效率
  6. 在Ubuntu8.04上简单定制个性化的Terminal操作界面
  7. [洛谷 1883]函数 三分法
  8. 文字溢出时,实现在末尾显示三个点省略效果
  9. mini_magick上传图片
  10. Python开发【第二篇】:Python基本数据类型