Python基础讲义(八):字典类型

字典类型

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小结

  • 理解字典特点,熟悉字典使用场合
  • 熟练掌握字典常用操作并能灵活应用
posted @ 2020-11-26 09:41  hzy&hmcj  阅读(218)  评论(0)    收藏  举报