python中字典相关操作,在实际开发中是必不可少的部分,除了它本身可以构造、存储数据外,它的结构和json类似,还可以互转。
在web开发、数据库查询结果集等都是以json或者字典形式存在,因此掌握字典相关操作是一个开发人员必备技能,下面的总结,按需获取,复制运行即可得出相应结果
1、创建字典(create)
====================基础创建=====================
dict_ = {} # 直接创建空的字典--->最常用
dict_default = {"key1":"value1",'key2':'value2'} # 赋值创建带默认值的字典--->创建默值字典最常用
dict_key = dict(key1="value1",key2="value2") # 通过关键字dict创建--->使用较少
dict_fromkeys = dict.fromkeys(["key1","key2","key3"],"6666") # fromkeys创建 使用较少
====================中高级创建======================
list_ = [("key1","value1"),("key2","value2")]
dict_list = dict(list_) # 列表嵌套二次元祖以及dict关键字创建,--->中等
dict_advance = { str(i):"value%s"%i for i in range(5) } # 字典解析创建字典--->常用
====================实际开发中常用构造================
list1,list2 = ["age","address","name"],[18,"重庆","张三"]
dict_advance2 = { key:value for key,value in zip(list1,list2) } # 字典解析创建字典(中高级用法)---> 常用
dict_zip = dict(zip(list1,list2)) # 最常用,代码短又简单,zip中防止可迭代对象即可,列表、元祖,字符串均可
执行上面代码后输出:
{}
{'key1': 'value1', 'key2': 'value2'}
{'key1': 'value1', 'key2': 'value2'}
{'key1': '6666', 'key2': '6666', 'key3': '6666'}
{'key1': 'value1', 'key2': 'value2'}
{'0': 'value0', '1': 'value1', '2': 'value2', '3': 'value3', '4': 'value4'}
{'age': 18, 'address': '重庆', 'name': '张三'}
{'age': 18, 'address': '重庆', 'name': '张三'}
2、字典新增元素(add)
dict_["age"] = 18 # dict[key] = value 方式新增--->最常用
value= {"name":"张三"} # dict中update 方式新增--->常用
dict_.update(value)
3、字典删除元素(del)
dict_ = {'age': 18, 'address': '重庆', 'name': '张三'}
=======================根据key 删除元素=================
del dict_["age"] # 普通删除--->基本不用
dict_.pop("address") #升级版删除--->最常用
dict_ = { key:value for key,value in dict_.items() if key != "name" } # 字典解析删除---> 一般不使用,面试或装逼用
执行上面三句后输出:
{}
=======================根据value 删除元素=================
dict_ = { key:value for key,value in dict_.items() if value != 18 } # 通过字典解析删除,--->最常用,一般封装成方法使用
输出:
{ 'address': '重庆', 'name': '张三'}
=======================删除、清空字典=================
dict_ = {'age': 18, 'address': '重庆', 'name': '张三'}
del dict_ # 将字典从内存中删除,后面引用报错 --->不常用
dict_.clear() # 清空字典中的所有key=value --->不常用
3、字典修改元素(modify)
dict_ = {'age': 18, 'address': '重庆', 'name': '张三'}
=======================修改字典值=================
dict_["age"] = 19 --->最常用
输出:
{'age': 19, 'address': '重庆', 'name': '张三'}
=======================修改字典key================
dict_.update({"newkey":dict_.pop("age")}) #封装成方法配合使用 --->常用
输出:
{'address': '重庆', 'name': '张三', 'newkey': 18}
4、字典相关元素获取(Find)
dict_ = {'age': 18, 'address': '重庆', 'name': '张三'}
=======================获取字典中所有key================
keys = list(dict_.keys()) #返回值是列表 --->常用
print(keys)
输出:
['age', 'address', 'name']
=======================获取字典中所有value================
keys = list(dict_.values()) #返回值是列表 --->常用
print(keys)
输出:
[18, '重庆', '张三']
=======================获取字典中所有key,value================
keys = list(dict_.items()) --->最常用
print(keys)
输出:
[('age', 18), ('address', '重庆'), ('name', '张三')]
======================根据key获取value===================
value1 = dict_["age"] # key 不存在是会报错 --->常用
value2 = dict_.get("age",None) # key 不存在时不会报错,并且可设置默认值,开发中最常用 --->常用
value3 = dict_.get("fff",None) # 演示key不存在这种默认值 --->最常用,也是建议使用
value4 = "".join([ str(dict_[key]) for key in dict_.keys() if key=="age" ]) # 装逼写法,基础差的绝对看不懂
print(value1,value2,value3,value4)
输出:
18 18 None 18
========================根据value获取key===================
key1 = {value:key for key,value in dict_.items() }.get("重庆") # 采用字典解析,key,value互换生成新的字典在获取值,一般封装成方法使用
key2 = [ key for key,value in dict_.items() if value=="重庆" ][0] # 采用列表解析获取key,一般封装成方法使用
key3 = "".join([ key[0] for key in dict_.items() if key[1] == "重庆" ]) # 采用列表解析获取key,一般封装成方法使用
print(key1,key2,key3)
输出:
address address address
5、字典排序(order)
======================根据key排序===================
dict_ = {'15': 18, '12': '重庆', '11': '张三'}
new_dict1 = dict(sorted(dict_.items())) #通过dict_.items()解析成元祖,在给元祖排序,在转换成字典
new_dict2 = {key:dict_[key]for key in sorted(dict_.keys())} #通过dict_.keys()获取所以key,在key祖排序,字典解析生成字典
print(new_dict1)
print(new_dict2)
输出
{'11': '张三', '12': '重庆', '15': 18}
{'11': '张三', '12': '重庆', '15': 18}
======================根据value排序===================
d = {'语文': 18, '数学': 88, '英语': 66,'物理': 22}
①new_order1 ={ va_ke[1]:va_ke[0] for va_ke in sorted( [(va,ke) for ke,va in sorted(d.items())])}
②new_order2 ={ va_ke[1]:va_ke[0] for va_ke in sorted(zip(d.values(),d.keys()))}
③new_order3 ={ key:va for key,va in sorted(d.items(),key=lambda items:items[1])}
print(new_order1)
print(new_order2)
print(new_order3)
输出:
{'语文': 18, '物理': 22, '英语': 66, '数学': 88}
{'语文': 18, '物理': 22, '英语': 66, '数学': 88}
{'语文': 18, '物理': 22, '英语': 66, '数学': 88}
解释:
①通过列表解析 [(va,ke) for ke,va in sorted(d.items())] 生成元祖(value,key)元祖,在给元祖排序,在用字典解析生成字典
②先通过(d.values(),d.keys())组装(value,key),在吧元祖压缩成一个列表,给列表排序,在用字典解析生成字典
③利用sorted可以指定排序关键字的原理,指定以value进行排序,先通过d.items()获取key,value的迭代对象,
然后通过key,指定排序关键字为value,sorted中指定排序关键字需要绑定函数,因此用lambda获取value
好了,相信你看了上面内容,慢慢练习,python的字典操作对你来说 so easy!,对了基本有关python字典相关的面试题你都能答出。
点赞收藏,忘记了就翻出来瞧瞧,慢慢的 它就是你的咯!
有看不懂的地方,,欢迎留言咨询,有问必答,相互学习,合作共赢~~~