目录
字典描述
- 字典是python语言中唯一的映射类型。
- 映射类型对象里哈希值(key)和指向的对象(value)是一对多的关系,通常被认为是可变的哈希表。
- 字典对象是可变的,它是一个容器类型,能存储任意个数的python对象,其中也可包括其他容器类型。
- 字典的键名必须是唯一的、不可变的,能够作为字典的键名的有字符串,元组、数字、布尔值。
字典类型与序列类型的区别:
- 存取和访问数据的方式不同
- 序列类型只用数字类型的键(从序列的开始按数值顺序索引)
- 映射类型可以用其他对象类型作键(如:数字、字符串、元组,一般用字符串作键),和序列类型的键不同,映射类型的键直接或间接的和存储数据值相关联。
- 映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。
- 映射类型用键直接“映射”到值。
字典基础操作
增:
#dic['hight'] = 100 通过key强制改,有hight项就会更改,没有就会增加
#dic.setdefault('name','hello') 有则不变,无则增加,setdefault(key) 可通过key查,没有返回None
#formkeys (太坑别用)dict.fromkeys('abc', 'hello'),返回一个新的字典,原字典不变。
删:
#dic.pop('name') 按key值删除,返回被删除的value。 如果找不到对应的key会报错
如果不想报错,添加返回值参数,dic.pop('name','无name时的返回值')。
#dic.clear() 清空字典,只清空字典所有内容
#del dic 在内存中彻底删除字典
#del dic('age') 也可以按key删除,找不到报错
#dic.popitem() 随机删除,返回一个元组 (key, value)
改:
#dic['hight'] = 100 有hight项就会更改,没有就会增加
#update dict2.update(dict1) 将dict1的内容覆盖更新到dict2中,dict1中的内容不变
查:
#dic['name'] 直接按key值查 找不到报错
#get() dic.get('name')如果有这个键返回对应的value值,没有这个键会返回None -------用这个
dic.get('name','没有此key')也可以设置返回值
#dic.setdefault(key) 有返回value 没有返回None
#for 循环查找 单循环只输出 key的值
字典排序(sorted)
按value进行排序:
my_dict = {'CD': 12, 'XA': 60, 'BJ': 15, 'GZ': 100}
# 排序后,原dict中并没有变化 ,产生了一个新dict
value_sorted_result = sorted(my_dict.items(), key=lambda item: item[1], reverse=True) # 按value进行降序
print(value_sorted_result) #[('GZ', 100), ('XA', 60), ('BJ', 15), ('CD', 12)]
按key进行排序:
my_dict = {'CD': 12, 'XA': 60, 'BJ': 15, 'GZ': 100}
# 排序后,原dict中并没有变化 ,产生了一个新dict
# 按key进行排序
key_sorted_result = sorted(my_dict.items(), key=lambda item: item[0], reverse=True) # 按key进行降序
print(key_sorted_result) #[('XA', 60), ('GZ', 100), ('CD', 12), ('BJ', 15)]
字典合并
方法一:update()方法
a = {'a': 1}
b = {'b': 1}
b.update(a)
print(b) # 打印:{'a': 1, 'b': 1}
方法二:字典的{**a, **b}方法
d = {**a, **b}
print(d) # 打印:{'a': 1, 'b': 1}
方法三:遍历并添加字典key,value
for k,v in a.items():
b[k] = v
print(b) # 打印:{'a': 1, 'b': 1}
字典解包
a,b = '12' #将后边解构打开按位置赋值给变量 支持 字符串 列表 元组
字典解包: * keys ** values
a, b, c = {'name': '阿登', 'gender': '男', 'age': 18}
print(a,b,c,type(a),type(b),type(c))
- 可以看出a b c接收了 字典的key
- name gender age <class 'str'> <class 'str'> <class 'str'>
a, *b, c = adeng = {'name': '阿登', 'gender': '男', 'age': 18, 'love_into': 'eat apple', 'hobby':'数学'}
print(a,b,c,type(a),type(b),type(c))
- 可以看出 a c接收的字典守尾的key b作为列表接收了剩余的key
- name ['gender', 'age', 'love_into'] hobby <class 'str'> <class 'list'> <class 'str'>
def fo(name,salary):
print("{:□^10}的工资是{}".format(name,salary))
dict_info = {"name": "阿登",'salary':16000}
# ** 两个星号解包是字典独有的,实际就是以key=value的形式传给函数
fo = fo(**dict_info) # □□□□阿登□□□□的工资是16000