# 字典

# 选择题

# 1. 题目

以下哪个不可以当作字典的键(  )
A.列表
B.元组
C.整数
D.字符串

答案:A

选项 A:列表是可变对象,不可哈希,不能作为字典的键。

选项 B:元组是不可变对象,可哈希,可以作为字典的键。

选项 C:整数是不可变对象,可哈希,可以作为字典的键。

选项 D:字符串是不可变对象,可哈希,可以作为字典的键。


# 2. 题目

给定字典d, 以下可以清空字典并保留变量的是(  )
A.d.clear()
B.del d
C.d.pop()
D.d.remove()

答案:A

选项 Ad.clear() 清空字典中所有的键值对,使字典变为空字典,但字典变量 d 依然存在。

选项 Bdel d 删除字典变量 d,字典不再存在,不符合 “保留变量” 的要求。

选项 Cd.pop() 删除并返回指定键对应的键值对,需要传入参数,且只能删除单个键值对,无法清空整个字典。

选项 D:字典没有 remove() 方法,这是列表的方法。


# 3. 题目

以下不能创建一个字典的语句是 (  )
A.dict2 = { 3 : 5 }
B.dict3 = {[1,2,3]: "uestc"}
C.dict1 = {}
D.dict4 = {(1,2,3): "uestc"}

答案:B

选项 A:使用字面量创建字典,键是整数 3,值是整数 5,合法。

选项 B:尝试用列表 [1,2,3] 作为字典的键,列表是可变不可哈希对象,不合法,这是核心错误选项。

选项 C:使用空大括号创建空字典,合法。

选项 D:使用元组 (1,2,3) 作为字典的键,元组是不可变可哈希对象,合法。


# 4. 题目

print(list({'a':1, 'b':2, 'c':3}))输出结果为(  )
A.['a’, 'b’, 'c']
B.[1,2,3]
C.[('a',1), ('b',2), ('c',3)]
D.[(1,'a'), (2,'b'), (3,'c')]

答案:A

选项 A:字典默认迭代的是键, list(字典) 将键转换为列表,结果为 ['a', 'b', 'c'],正确。

选项 B:如果要获取值的列表,应该使用 list(字典.values()) ,直接转换字典不会得到值的列表。

选项 C:如果要获取键值对的列表,应该使用 list(字典.items())

选项 D:这是将键值对反转后的结果,不是默认行为。


# 5. 题目

dict = {"name": "wangwu", "age": 22}
print(dict["sex"])print(dict.get("sex"))输出是什么(    )
A.None, None
B.None, KeyError
C.KeyError, KeyError
D.KeyError, None

答案:D

选项 Adict["sex"] 会抛出 KeyError,不是 None。

选项 B:顺序错误, dict["sex"] 会抛出 KeyError, dict.get("sex") 返回 None。

选项 Cdict.get("sex") 不会抛出 KeyError,而是返回 None。

选项 Ddict["sex"] 抛出 KeyError, dict.get("sex") 返回 None,正确。


# 判断题

# 1. 题目

给字典不存在的键赋值时会报错.   (   )

答案:错

解析:对于普通的 Python 字典,当键不存在时,执行 字典[不存在的键] = 值 的操作,会自动在字典中新增一个键值对,程序正常执行,无任何报错。


# 2. 题目

字典对象的get()方法可以获取指定“键”对应的“值”,并且可以在指定“键”不存在的时候返回指定值,如果不指定则返回None(   )

答案:对

解析字典.get(key, default=None) 方法的功能是:当 key 存在时,返回该键对应的值;当 key 不存在时,返回 default 指定的值(若不指定,默认返回 None)。


# 3. 题目

字典可以作为集合的元素。  (   )

答案:错

解析:字典是可变对象,不可哈希,而集合的元素必须是可哈希对象。因此,字典不能作为集合的元素。


# 4. 题目

假设有列表a = ['name', 'age', 'sex']和b = ['Dong', 38, 'Male'],请使用一个语句将这两个列表的内容转换为字典,并且以列表a中的元素为“键”,以列表b中的元素为“值”,这个语句可以写为c = dict(zip(a, b))(   )

答案:对

解析zip(a, b) 按对应位置将两个列表的元素打包成元组, dict() 构造函数将这些元组转换为字典,键来自列表 a,值来自列表 b,符合要求。


# 5. 题目

已知x = {1:1, 2:2},那么执行语句x[3] = 3之后,表达式sorted(x.items())的值为{(1, 1), (2, 2), (3, 3)}(   )

答案:错

解析sorted() 函数的返回值固定为列表,不是集合。题目中将排序结果写为 {(1, 1), (2, 2), (3, 3)} (集合格式),这是语法类型错误。


# 6. 题目

已知 x = {'a':'b', 'c':'d'},那么表达式 'a':'b' in x 的值为True(   )

答案:错

解析'a':'b' 是字典中键值对的字面量书写格式,仅能用于字典定义,不能作为独立表达式参与 in 判断。即使忽略语法错误, in 运算符在字典中仅判断键是否存在,不判断键值对。


# 7. 题目

任意长度的Python列表.元组.字符串和字典中最后一个元素的下标为-1.   (    )

答案:错

解析:只有列表、元组、字符串支持负索引(下标 - 1 表示最后一个元素),而字典不支持索引访问,不存在 “下标 - 1 对应最后一个元素” 的说法。


# 8. 题目

字典中值可以是任意类型.  (  )

答案:对

解析:Python 字典的值可以是任意内置类型或自定义类型,包括不可哈希对象(如列表、字典)也可作为字典的值。


# 填空题

# 1. 题目

已知 x = {1:2, 2:3},那么表达式 x.get(2, 4) 的值为______

答案:3

解析x.get(2, 4) 中,键 2 存在于字典中,因此返回该键对应的值 3,而不是默认值 4。


# 2. 题目

已知 x = {1:2, 2:3, 3:4},那么表达式 sum(x) 的值为________

答案:6

解析sum() 函数对字典操作时,默认迭代字典的键。字典 x 的键是 1、2、3,求和结果为 1+2+3=6。


# 3. 题目

已知字典 x = {i:_____ for i in range(3)},那么表达式 ''.join(x.values()) 的值为'345'

答案:str (i+3)

解析range(3) 生成的 i 依次为 0、1、2,字典的值需要是 '3'、'4'、'5'。 str(i+3) 满足:i=0 时为 '3',i=1 时为 '4',i=2 时为 '5'。


# 4. 题目

运行下列语句后
data = {'x': 1, **{'y': 2}}
k = min(data.items(), key=lambda item: -item[1])[1]
k的值为_____

答案:2

解析data = {'x': 1, **{'y': 2}} 合并为 {'x': 1, 'y': 2}min(data.items(), key=lambda item: -item[1]) 按值的负数排序,即取值最大的键值对 ('y', 2),然后取索引 1 的元素(值)得到 2。


# 5. 题目

表达式sorted({'a':3, 'b':9, 'c':78})的值为_______

答案:['a','b','c']

解析sorted() 对字典操作时,默认迭代字典的键,并对键进行升序排序。字典的键是 'a'、'b'、'c',排序后得到 ['a','b','c']。


# 6. 题目

已知字典 x = {i:str(i+3) for i in range(5)},那么表达式 sum(item[0] for item in x.items()) 的值为_______

答案:10

解析range(5) 生成的 i 依次为 0、1、2、3、4(字典的键)。 sum(item[0] for item in x.items()) 对字典的键求和,结果为 0+1+2+3+4=10。