# 字典 映射类型 由键值对构成 用{}表示 类似于js中的对象
# 列表有位置关系 是有序的 字典是无序的 键是可以哈希的 值可以是任意类型的数据 键一定是唯一的 键是不可修改的类型
# id(a) 找到a这个对象的内存地址
# 基本数据类型中,不可变类型有整形,字符串,元组;可变类型有列表,字典
# 创建字典
# dic = {'name': 'Tengxi', 'age': 18, 'hobby': 'football'} # 常用
# dic1 = dict((('name', 'Tengxi'), ('gender', 'male')))
# print(dic1['gender'])
# new_dict = dict.fromkeys(['host', 'master', 'owner'], None) # 生成带统一默认值的字典
# new_dict['host'] = 'Bigger'
# print(new_dict)
# 字典操作
# 增
dict1 = {'name': 'Tengxi'}
dict1['age'] = 19 # 类似js中对象增加实例的方法,没有的键是新增,有的键是修改
# setdefault 有返回值
dict1.setdefault('age', 45) # 字典中有这个键,不做任何改动,会返回该键的真实返回值
dict1.setdefault('gender', 'male') # 字典中没有这个键,实现新增键的操作
# print(dict1)
# print(dict1.keys())
# 查 通过键名找值
# print(type(dict1.keys())) # 找字典中所有的键,返回值是dict_keys的数据类型
# print(list(dict1.keys())) # 将dict_keys类型的转成列表类型,方便操作
# print(type(dict1.values())) # 找字典中所有的键,返回值是dict_keys的数据类型
# print(dict1.items()) # 找字典中所有键值对
# 改
# dict1['name'] = 'Alex'
# print(dict1)
# update 用新字典内容代替旧字典的内容,如果有重复的,会旧的覆盖新的,没有重复的,会在update前的字典中增加新的键值对,改变的是update前面的字典
# 类似列表中的extend
dict2 = {'name': 'delicious food', 'Singer': 'Professor He'}
# dict1.update(dict2)
# print(dict1)
# print(dict2)
# 删
# del 删键值对(指定的键值对)
# del dict2['name']
# print(dict2)
# clear 清空字典
# dict2.clear()
# print(dict2)
#pop 通过键删除 有返回值,返回指定删除的键对应的值
# test = dict2.pop('singer')
# print(test)
# print(dict2)
# popitem 随机删除一组键值对(因为字典是无序的,所以是随机删)
# tried = dict2.popitem()
# print(tried, dict2)
# 排序 sorted 依据键名排序, 排序的结果是列表类型值
# print(sorted(dict2))
# print(sorted(dict2.values())) # 依据值排序
# print(sorted(dict2.items())) # 依然是依据键名排序
#字典遍历
# new_dict = {'name': 'Tengxi', 'gender': 'male', 'age': 28}
# for i in new_dict: # 推荐方法
# print(i) # 这里遍历出来的是键
# print(new_dict[i]) # 这里遍历出来的是值
# for i, v in new_dict.items(): # 获取items的时候有个转换的过程,效率低
# print(i, v) # 两个循环变量输出的普通字符
# for i in new_dict.items():
# print(i) # 一个循环变量得到的是元组