Python全栈__字典及其操作
Posted 芒果不盲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python全栈__字典及其操作相关的知识,希望对你有一定的参考价值。
字典
概念
字典,Python基础数据类型之一,{}以键值对的形式存储数据。
以key : value 形式存储数据。例如,name 为 key,Laonanhai 为 value。
dic = {\'name\': \'Laonanhai\', \'age\': 45, \'name_list\': [\'反面教材\', \'俊俊\', ...] }
Python中唯一的映射类型。用以存储大量的关系型数据。
数据类型的分类
可变类
可变(不可哈希hash):list、dict、set。例如list = [11, 222, 333]
不可变(可哈希hash):str、int、tuple、bool。例如name = \'alex\'
容器类
容器类的数据类型:list、dict、tuple。例如l1 = [11, True, \'alex\', [22, 33, 44]]
非容器类的数据类型:int、str、bool。例如s1 = \'[11, 22, 33]\'
字典的key必须是不可变的数据类型,是唯一的。
hash算法
字典的键key通过hash表转换为数字,采用二分查找查询数字。
字典的value可以使任意的数据类型。
字典的查询速度非常快,可以存储大量的关系型数据。
字典在Python 3.5 包含3.5之前都是无序的,但在3.6之后是有序的。
键唯一
当存在一样的键时后面的覆盖前边的。例如:
dic = { \'name\': \'alex\', \'name\': \'WuSir\' } print(dic)
键必须是不可变的可哈希的数据类型。当键为可变的不可哈希的数据类型是,输出提示错误。例如:
dic = { \'name\': \'alex\', [1, 2, 3]: \'value\' } print(dic)
在循环字典时,最好不要改变字典的大小,会影响结果或者报错。
错误示例:
dic = {\'k1\': \'v1\', \'k2\': \'v2\', \'k3\': \'v3\', \'name\': \'alex\'} for i in dic: if \'k\' in i: del dic[i] print(dic)
dic = {\'k1\': \'v1\', \'k2\': \'v2\', \'k3\': \'v3\', \'name\': \'alex\'} l1 = [] for key in dic: if \'k\' in key: l1.append(key) print(l1) for key in l1: del dic[key] print(dic)
操作
增
dic[\'A\'] = B
A为键,B为值。直接增加,有则覆盖,无则添加。
无则添加
dic = {\'name\': \'老男孩\', \'age\': 56, \'hobby\': \'women\'} dic[\'sex\'] = \'Laddy_boy\' print(dic)
有则覆盖
dic = {\'name\': \'老男孩\', \'age\': 56, \'hobby\': \'women\'} dic[\'name\'] = \'alex\' print(dic)
dic.setdefault(\'A\',\'B\')
A为键,B为值。有则不变,无则添加。
无则添加
当只添加A时,对应的B值默认为None。
dic = {\'name\': \'老男孩\', \'age\': 56, \'hobby\': \'women\'} dic.setdefault(\'sex\') print(dic)
当A、B都有值时,A为key,B为value。
dic = {\'name\': \'老男孩\', \'age\': 56, \'hobby\': \'women\'} dic.setdefault(\'sex\',\'Laddyboy\') print(dic)
有则不变
dic = {\'name\': \'老男孩\', \'age\': 56, \'hobby\': \'women\'} dic.setdefault(\'name\', \'alex\') print(dic)
dict.fromkeys(A, B)
A为可迭代对象,B任意。创建一个字典,迭代A的最小元素为键,B为值。
dic = dict.fromkeys(\'abc\', 666) print(dic)
dic = dict.fromkeys([11, 22, 33], 666) print(dic)
dic = dict.fromkeys([1, 2, 3], []) dic[1].append(666) print(dic)
删
dic.pop(\'A\')
有返回值,返回的是键对应的值。
dic = {\'name\': \'老男孩\', \'age\': 56, \'hobby\': \'women\'} print(dic.pop(‘age’))
print(dic)
当没有此键时,可修改默认返回值。
dic = {\'name\': \'老男孩\', \'age\': 56, \'hobby\': \'women\'} print(dic.pop(\'age1\', \'没有此键...\')) print(dic)
dic.clear()
清空字典。
dic = {\'name\': \'老男孩\', \'age\': 56, \'hobby\': \'women\'} dic.clear() print(dic)
dic.popitem()
随机删除,有返回值,返回值为元组,里面是删除的键值对。
在Python 3.5及包含3.5之前是无序删除,Python 3.6 以后是删除字典最后一位。
dic = {\'name\': \'老男孩\', \'age\': 56, \'hobby\': \'women\'} print(dic.popitem()) print(dic)
del
del dic
删除整个字典。
dic = {\'name\': \'老男孩\', \'age\': 56, \'hobby\': \'women\'} del dic print(dic)
del dic[\'A\']
按照键A删除对应的键值对。
dic = {\'name\': \'老男孩\', \'age\': 56, \'hobby\': \'women\'} del dic[\'name\'] print(dic)
改
dic[\'A\'] = \'B\'
有则覆盖,没有则添加。
dic = {\'name\': \'老男孩\', \'age\': 56, \'hobby\': \'women\'} dic[\'name\'] = \'Alex\' print(dic)
A.update(B)
A、B分别为两个字典。两个字典的更新。
将B字典的内容覆盖添加到A里面,B不变。
dic = {"name": "jin", "age": 18, "sex": "male"} dic2 = {"name": "alex", "weight": 75} dic2.update(dic) print(dic) print(dic2)
查
dic[A]
A为键。
dic = {"name": "jin", "age": 18, "sex": "male"} print(dic[\'name\'])
当字典中没有查找的键是,打印报错。
dic = {"name": "jin", "age": 18, "sex": "male"} print(dic[\'name1\'])
dic.get(A)
A为键。
dic = {"name": "jin", "age": 18, "sex": "male"} print(dic.get(\'name\'))
当查找的键字典里没有时,默认打印输出None。例如:
dic = {"name": "jin", "age": 18, "sex": "male"} print(dic.get(\'name1\'))
当查找的键字典里面没有时,可将默认输出修改为自己需要的内容。例如:
dic = {"name": "jin", "age": 18, "sex": "male"} print(dic.get(\'name1\',\'SB,没有此键\'))
for循环
输出键
dic = {"name": "jin", "age": 18, "sex": "male"} for i in dic: print(i)
dic.keys()
打印输出的内容为键,打印输出的格式为 dict_keys
dic = {"name": "jin", "age": 18, "sex": "male"} print(dic.keys(), type(dic.keys()))
dic.values()
打印输出的内容为值,打印输出的格式为dict_values。
dic = {"name": "jin", "age": 18, "sex": "male"} print(dic.values(), type(dic.values()))
dic.items()
打印输出的内容为键值对,放在元组内。打印输出的格式为dict_items
dic = {"name": "jin", "age": 18, "sex": "male"} print(dic.items(), type(dic.items()))
for循环
打印key
将键循环打印出来。
dic = {"name": "jin", "age": 18, "sex": "male"} for key in dic.keys(): print(key)
打印value
dic = {"name": "jin", "age": 18, "sex": "male"} for i in dic.values(): print(i)
键转换成列表
dic = {"name": "jin", "age": 18, "sex": "male"} l_key = list(dic.keys()) print(l_key)
值转换成列表
dic = {"name": "jin", "age": 18, "sex": "male"} l_values = list(dic.values()) print(l_values)
分别赋值
a, b = 1, 2 print(a, b)
a, b = (\'alex\', \'34\') print(a, b)
a, b = [\'alex\', \'34\'] print(a,b)
有如下:
a = 1
b = 3
用一行代码实现a b值互换。
a = 1 b = 3 a, b = b, a print(a, b)
for i in [22, 33, 44]: print(i)
for i in [(11, 22), (33, 44), (55, 66)]: print(i)
k, v = (\'name\', \'老男孩\') print(k, v)
dic = {"name": "jin", "age": 18, "sex": "male"} for k, v in dic.items(): print(k, v)
字典的嵌套
原始字典dic
dic = { \'name_list\': [\'碗蓉\', \'俊俊\', \'爽妹\'], \'status\': None, \'personal_msg\': { \'name\': \'反面教材\', \'age\': 25, \'hobby_list\': [\'抽烟\', \'喝酒\', \'烫头\'], } }
添加键值对
学校:老男孩
dic = { \'name_list\': [\'碗蓉\', \'俊俊\', \'爽妹\'], \'status\': None, \'personal_msg\': { \'name\': \'反面教材\', \'age\': 25, \'hobby_list\': [\'抽烟\', \'喝酒\', \'烫头\'], } } dic[\'学校\'] = \'老男孩\' print(dic)
嵌套字典的修改
将status对应的值改为True。
dic = { \'name_list\': [\'碗蓉\', \'俊俊\', \'爽妹\'], \'status\': None, \'personal_msg\': { \'name\': \'反面教材\', \'age\': 25, \'hobby_list\': [\'抽烟\', \'喝酒\', \'烫头\'], } } dic[\'status\'] = True print(dic)
嵌套字典元素追加
给name_list追加一个元素‘平平’。
dic = { \'name_list\': [\'碗蓉\', \'俊俊\', \'爽妹\'], \'status\': None, \'personal_msg\': { \'name\': \'反面教材\', \'age\': 25, \'hobby_list\': [\'抽烟\', \'喝酒\', \'烫头\'], } } dic[\'name_list\'].append(\'平平\') print(dic)
嵌套字典添加键值对
给personal_msg对应的字典添加一个键值对sex:男。
dic = { \'name_list\': [\'碗蓉\', \'俊俊\', \'爽妹\'], \'status\': None, \'personal_msg\': { \'name\': \'反面教材\', \'age\': 25, \'hobby_list\': [\'抽烟\', \'喝酒\', \'烫头\'], } } dic[\'personal_msg\'][\'sex\'] = \'男\' print(dic)
嵌套字典修改
将hobby_list对应的列表中的烫头改成唱歌。
dic = { \'name_list\': [\'碗蓉\', \'俊俊\', \'爽妹\'], \'status\': None, \'personal_msg\': { \'name\': \'反面教材\', \'age\': 25, \'hobby_list\': [\'抽烟\', \'喝酒\', \'烫头\'], } } dic[\'personal_msg\'][\'hobby_list\'][-1] = \'唱歌\' print(dic)
以上是关于Python全栈__字典及其操作的主要内容,如果未能解决你的问题,请参考以下文章
python全栈之路:vars():__name__,__file__,__package__,__doc__ vars()