08 python 初学(字典)
字典是 python 中唯一的映射类型 。采用键值对(key-value)的形式存储数据。
python 对 key 进行哈希函数运算,根据计算的结果决定 value 的存储地址,所以字典时无需存储的,且 key 必须是可哈希的。可哈希表示 key 必须是不可变类型,如:数字、字符串、元组。
字典是除列表之外 python 之中最灵活的内置数据结构类型。列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取
字典两大特点:无序,键唯一
遇到字典就是键,遇到列表就是位置
声明:
dic1 = {'name': 'lily', 'age': '18'}
# 第二种创建方式
dic2 = dict((('name','lily),))
输出内存地址:id()函数
a = 10 print(id(a)) b = a print(id(b)) b = 15 print(id(b)) 输出: 140716292682864 140716292682864 140716292683024
不可变类型:整型、字符串、元组
可变类型:列表、字典
字典的操作:
增:
dic1 = {'name': 'lily'} dic1['age'] = 18 print(dic1) >>>{'name': 'lily', 'age': 18}
dic1.setdefault('age', 34) # 如果这个键有,不做任何变动;如果没有添加进去 print(dic1) >>>{'name': 'lily', 'age': 18}
查:
print(dic1['name']) # 查,通过键去寻找 print(dic1.keys()) # 拿出所有的键 print(dic1.values()) # 拿出所有的值 print(dic1.items()) # 拿出所有的键值对 # 输出: lily dict_keys(['name', 'age']) dict_values(['lily', 18]) dict_items([('name', 'lily'), ('age', 18)])
改:
dic1['name'] = 'mylily' # 通过键去改变值 print(dic1) dic2 = {1: 111, 2: 222} dic1.update(dic2) # 把dic2中的内容加入dic1,如果有相同的键,会对值做一个更新 print(dic1) print(dic2) # output: {'name': 'mylily', 'age': 18} {'name': 'mylily', 'age': 18, 1: 111, 2: 222} {1: 111, 2: 222}
删:
del dic1['name'] print(dic1) >>>{'age': 18, 1: 111, 2: 222} # 清空字典,字典是空的;相比 del dic1,是删除字典,字典不存在了,print会报错 dic1.clear() print(dic1) >>>{} # 删除指定键值对,并返回该键值对的值 print(dic1.pop('name')) >>>mylily # 随即删除一组键值对 a = dic1.popitem() print(a, dic1) >>>(2, 222) {'name': 'mylily ', 'age': 18, 1: 111}
字典其他操作以及涉及到的方法:
# 另一种字典声明方式,不常用。后面作为一个统一的值赋给每一个键 dic3 = dict.fromkeys(['host1', 'host2', 'host3'], 'test') print(dic3) # >>>{'host1': 'test', 'host2': 'test', 'host3': 'test'}
字典的嵌套:
school = { '初一': { '一班': ['hong', 'su', 'lily'], '二班': ['gang', 'ming'] }, '初二': { '一班': ['ququ', 'xiaoming'] }, '初三': 42 } school['初一']['一班'][2] = 'mylily' print(school) # {'初一': {'一班': ['hong', 'su', 'mylily'], '二班': ['gang', 'ming']}, '初二': {'一班': ['ququ', 'xiaoming']}, '初三': 42}
字典的排序:对整个字典排序是对键来排序; 如果要对值进行排序可以sorted(sorted_dic.values());如果是sorted(sorted_dic.items()),则是输出排序后的每个键值对,但顺序也是按照键来排序的
sort_dic = {0: 555, 2: 222, 1: 111} print(sorted(sort_dic)) # >>>[0, 1, 2]
字典的遍历:如果要得到键和值,推荐使用第一种方式,效率比较高。第二种方式 item 转换成列表的时间远超过通过索引查值
for i in sort_dic: print(i) # 输出的 i 是键 for i in sort_dic.items(): print(i) # (0, 555) # (2, 222) # (1, 111)
猪猪侠要努力呀!