字典类型
0x01内容导图
![]()
0x02字典的特点
- 使用花括号,元素由键和值两部分组成(冒号:分隔)
- 无序,键不可重复,可嵌套,可枚举
- 键必须为不可变类型:底层实现为哈希技术
- 字典对象本身是可变对象,元素可增删改
- 简单示例
>>> dic = {"a":97, "b":98, "c":99, "a":100} #键不重复,此处相当于修改a对应的值
>>> dic
{'a': 100, 'b': 98, 'c': 99}
>>> d = {[1, 2]:"a"}
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
d = {[1, 2] : "a"}
TypeError: unhashable type: 'list' #键必须为可哈希对象,即不可变对象
>>> d2 = {"tom":{"age":18, "sex":"男"}, "mary":{"age":16, "sex":"女"}} #值部分可嵌套字典
0x03字典的常用操作
- 键访问
- 读访问,根据键获取值
- 写访问:已经存在则修改对应值,否则新增键值对
- del操作:根据键删除指定键值对
- 键是否存在判断:in,字典默认为键集合
- formkeys(iter, default):批量创建键值对(返回字典对象),参数iter表示键集合,default是统一的默认值
- keys()、values()、items():分别获取键集、值集、元素集
- get(key, default):获取key键对应的值,不存在则返回默认值default,相当有用
- setdefault(key, default):和get相似,区别是不存在将在字典中新增键值对
- 常用操作练习
>>> ls = [ch for ch in "abcd"]
>>> dic = dict.fromkeys(ls, 90) #批量创建,返回字典对象
>>> dic
{'a': 90, 'b': 90, 'c': 90, 'd': 90}
>>> dic["a"] = 97 #存在则为修改
>>> dic
{'a': 97, 'b': 90, 'c': 90, 'd': 90}
>>> dic["e"] = 90 #不存在则新增
>>> dic
{'a': 97, 'b': 90, 'c': 90, 'd': 90, 'e': 90}
>>> del dic["d"] #删除指定键值对
>>> dic
{'a': 97, 'b': 90, 'c': 90, 'e': 90}
>>> dic["d"] #读访问,不存在则报错
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
dic["d"]
KeyError: 'd'
>>> dic.get("d", 0) #建议使用get代替键的读访问
0
>>> dic.keys() #获取键集合,字典默认
dict_keys(['a', 'b', 'c', 'e'])
>>> for key in dic:
print(key, end=" ")
a b c e
>>> dic.items()
dict_items([('a', 97), ('b', 90), ('c', 90), ('e', 90)]) #类似于列表的对象,其中元素为二元组;可以通过list转换
>>> dic.values()
dict_values([97, 90, 90, 90]) #类似于列表的对象,可以通过list转换
0x04案例:选票统计
- 输入候选人选票列表(投票)
- 遍历列表统计(唱票)
- 输出结果
- 实现代码
def ballot():
ls = []
while True:
name = input()
if name == "-1": break
ls.append(name)
return ls
def count(votes):
da = {}
for name in votes:
v = da.get(name, 0) #利用字典get方法,不需要分支
da[name] = v + 1
return da
def disp(table):
for name in table:
print("{}的票数为:{}".format(name, table[name]))
def run():
votes = ballot()
table = count(votes)
disp(table)
if __name__== "__main__":
run()
0x05小结
- 理解字典特点,熟悉字典使用场合
- 熟练掌握字典常用操作并能灵活应用