Py学习  »  Python

你知道和不知道的Python字典都在这里!!

Python开发者 • 3 年前 • 402 次点击  

(给Python开发者加星标,提升Python技能

来源:南枝向暖北枝寒MA

https://blog.csdn.net/mall_lucy/article/details/106601632

【导语】:你是否了解Python字典,以及创建Python字典都有哪些的实际的应用操作,还有如何访问字典中的值等等,此文章就是针对这些问题,给出超出你预期的答案。


本文从六个方面介绍字典,包括:字典创建的5种方式、访问字典元素、字典元素添加、字典元素删除、字典的其他方法、序列解包(拆包)。


字典


字典是“键值对”的无序可变序列,字典中的每个元素都是一个“键值对”,包含:“键对象”和“值对象”。可以通过“键对象”实现快速获取、删除、更新对应的“值对象”。


列表中我们通过“下标数字”找到对应的对象。字典中通过“键对象”找到对应的“值对象”。


“键”:是任意的不可变数据,比如:整数、浮点数、字符串、元组。但是:列表、字典、集合这些可变对象,不能作为“键”。并且“键”不可重复。


“值”:可以是任意的数据,并且可重复。


空字典表示方式:{}或dict()


1.创建字典


方式一:{key:value}

# {key: value}
dict1 = {'one': 1, 'two': 2, 'three': 3}print(dict1)

方式二:dict()

# dict(zip(keys, values))# 或dict([(k, v), (k, v)])# 或dict(((k, v), (k, v)))
k = ['one', 'two', 'three']v = [1, 2, 3]dict2 = dict(zip(k, v))print(dict2)
dict3 = dict([('one', 1), ('two', 2), ('three', 3)])print(dict3)
dict3 = dict((('one', 1), ('two', 2), ('three', 3)))print(dict3)

方式三:dict(key=value)

# dict(key=value)
dict4 = dict(one=1, two=2, three=3)print(dict4)

方式四:字典推导

# 字典推导式
lst1 = ['one', 'two', 'three']lst2 = [1, 2, 3]dict5 = {lst1[i]: lst2[i] for i in range(len(lst1))}print(dict5)

方式五:fromkeys()

# fromkeys()
# 没有指定value,默认Nonedict6 = dict.fromkeys(['k1', 'k2', 'k3'])print(dict6) # {'k1': None, 'k2': None, 'k3': None}
# 指定valuedict7 = dict.fromkeys(['k1', 'k2', 'k3'], 'value')print(dict7)  # {'k1''value''k2''value''k3''value'}


2.访问字典元素

#定义一个字典a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}

1.通过[键]获得“值”。若键不存在,则抛出异常。

a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}print(a['name'])  # Lucyprint(a['sex'])  # 报错

2.通过get()方法获得“值”。推荐使用。优点是:指定键不存在,返回None;也可以设定指定键不存在时默认返回的对象。推荐使用get()获取“值对象”




    
a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}
print(a.get('sex''不存在此键'))  # 不存在此键

3.列出所有的键值对。

for k, v in a.items():    print(k, v)

4.列出所有的键,列出所有的值。

for k in a.keys():    print(k)
for v in a.values(): print(v)

5.检测一个“键”是否在字典中。

print('name' in a)  # True


3.字典元素添加


给字典新增“键值对”。如果“键”已经存在,则覆盖旧的键值对;如果“键”不存在,则新增“键值对”。

a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}a['adder'] = '上海市'print(a)

update()

# 更新,有则覆盖,无则添加# 1. 增加键值对# 方式一:dic9 = {'name': 'lucy', 'age': 18}dic9.update(hobby='运动', hight=178)print(dic9)  # {'name': 'lucy', 'age': 18, 'hobby': '运动', 'hight': 178}
# 方式二:dic10 = {'name': 'lucy', 'age': 18}dic10.update([('hobby', '运动'), ('hight', 178)])print(dic10) # {'name': 'lucy', 'age': 18, 'hobby': '运动', 'hight': 178}
dic10 = {'name': 'lucy', 'age': 18}dic10.update((('hobby', '运动'), ('hight', 178)))print(dic10) # {'name': 'lucy', 'age': 18, 'hobby': '运动', 'hight': 178}
# 方式三:dic11 = {'name': 'lucy', 'age': 18}dic12 = {'name': 'tom', 'hight': 178}dic11.update(dic12)print(dic11) # {'name': 'tom', 'age': 18, 'hight': 178}
# 2. 修改键所对应的值dic13 = {'name': 'lucy', 'age': 18}dic13.update(name='tom')print(dic13) # {'name': 'tom', 'age': 18}

setdefault(key,default)

# setdefault(key,default)# 如果default省略,向字典中添加了key:None,# 如果dedault未省略。则向字典中添加了key:defaultdict1 = {"name": "张三", "age": 18, "score": 100, "hobby": "篮球"}print(dict1)dict1.setdefault("111")print(dict1)  # {'name': '张三', 'age': 18, 'score': 100, 'hobby': '篮球', '111': None}
dict1.setdefault("222", 222)print(dict1)  # {'name''张三''age'18'score'100'hobby''篮球''111': None, '222'222}


4.字典元素删除


pop()

删除指定键值对,并返回对应的“值对象”。

a = {'name': 


    
'Lucy', 'age': 18, 'job': 'programmer'}b = a.pop('age')print(b)  # 18print(a)  # {'name''Lucy''job''programmer'}

popitem()

随机删除一个键值对,并返回。若想一个接一个地移除并处理项,这个方法就非常有效。

a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}b = a.popitem()print(b)
a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}for i in range(len(a)):    a.popitem()print(a)  # {}

clear()

删除所有键值对。

a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}a.clear()print(a)  # {}

del

a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}del a['name']print(a)  # {'age': 18, 'job': 'programmer'}


5.字典的其他方法


copy()

import copy# a.copy(),和列表的使用完全相同,拷贝的是最外层的地址dict4 = {"name": "张三", "age": 18, "score": 100, "hobby": "篮球"}print(dict4)dict5 = dict4.copy()dict4["name"] = "jack"print(dict4)print(dict5)print(dict5 is dict4)
print("*" * 20)
# 思考问题,列表和字典的拷贝# a.list1 = [1, 2, 3, {"name": "张三", "age": 18}]list2 = list1.copy()list1[-1]["age"] = 20print(list2)
# b
list1 = [1, 2, 3, {"name": "张三", "age": 18}]list2 = copy.deepcopy(list1)list1[-1]["age"] = 20print(list2)
print("*" * 30)
# cdict4 = {"hobby": ["篮球"]}print(dict4)dict5 = dict4.copy()dict4["hobby"].append("足球")print(dict5)


6.序列解包(拆包)


序列解包可以用于元组、列表、字典,可以让我们方便的对多个变量赋值。

>>> x,y,z = (10,20,30)>>> x10>>> y20>>> z30>>> a,b,c = [10,20,30]>>> a10>>> b20>>> c30

序列解包用于字典时,默认是对“键”进行操作;如果需要对键值对操作,则需要使用items();如果需要对“值”进行操作,则需要使用values();

di = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}a, b, c = diprint(a, b, c)  # name age job
a, b, c = di.items()print(a) # ('name', 'Lucy')
a, b, c = di.values()print(a)  # Lucy



- EOF -

推荐阅读  点击标题可跳转

1、Python 优雅的操作字典

2、Python 源码阅读:dict

3、深入 Python 字典的内部实现


觉得本文对你有帮助?请分享给更多人

关注「Python开发者」加星标,提升Python技能

点赞和在看就是最大的支持❤️

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/74699
 
402 次点击