Python dict的介绍、特性、作用、底层原理和使用

 

Python字典(dict)是一种可变的、无序的键值对集合。它是Python内置的一种数据类型,可以存储任意数量的键值对,其中每个键必须是唯一的。字典是Python编程中非常常用的数据结构,本文将介绍Python字典的特性、作用、底层原理和使用方法。

特性

Python字典的特性如下:

1. 可变性:字典是一种可变的数据类型,可以在运行时添加、删除或修改键值对。

2. 无序性:字典中的键值对是无序的,即无法通过索引访问它们。

3. 唯一性:字典中的键必须是唯一的,如果插入重复的键,则后面的值将覆盖前面的值。

4. 可嵌套性:字典可以嵌套在其他字典中,也可以嵌套在其他数据类型中。

作用

Python字典的作用如下:

1. 存储数据:字典可以用于存储任何类型的数据,包括数字、字符串、列表、元组、字典等。

2. 快速访问数据:由于字典使用哈希表实现,因此可以快速访问数据,时间复杂度为O(1)。

3. 处理结构化数据:字典可以用于处理结构化数据,例如JSON格式的数据。

底层原理

Python字典的底层原理是使用哈希表实现的。哈希表是一种数据结构,它使用哈希函数将键映射到一个唯一的索引,然后将值存储在该索引处。当需要访问值时,使用相同的哈希函数将键映射到相同的索引,并在该索引处查找值。由于哈希函数的唯一性,每个键都可以映射到唯一的索引,因此可以快速访问值。

Python专栏:https://blog.csdn.net/zhouruifu2015/category_5742543
技术圈:https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

使用

Python字典的使用方法如下:

1. 创建字典

使用花括号{}或dict()函数可以创建一个空字典,例如:

```

empty_dict = {}

empty_dict = dict()

```

也可以在创建字典时指定键值对,例如:

```

person = {'name': 'SteveRocket', 'age': 26, 'gender': 'M'}

```

2. 访问字典

可以使用键来访问字典中的值,例如:

```

print(person['name'])  # 输出: SteveRocket

print(person['address'])  # KeyError: 'address'

```

如果键不存在,则会引发KeyError异常,可以使用get()方法来避免这种情况,例如:

```

print(person.get('address', 'unknown'))  # 输出: unknown

```

3. 修改字典

可以使用键来修改字典中的值,例如:

```

person['age'] = 28

```

如果键不存在,则会创建一个新的键值对,例如:

```

person['address'] = 'https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q'

```

4. 删除字典

可以使用del语句删除字典中的键值对,例如:

```

del person['gender']

```

也可以使用pop()方法删除键值对,并返回删除的值,例如:

```

age = person.pop('age')

```

5. 遍历字典

可以使用for循环遍历字典中的键值对,例如:

# 遍历出字典的key和value
for key, value in person.items():
    print(key, value)

也可以使用keys()方法遍历字典中的键,或使用values()方法遍历字典中的值,例如:

# 遍历出字典的key
for key in person.keys():
    print(key)

# 遍历出字典的value
for value in person.values():
    print(value)

6. 字典的update更新方法

d = {"name": "SteveRocket", "desc": "Python3.11 dict", "url":"https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q"}
print("d:", d)  # d: {'name': 'Steverocket', 'desc': 'Python3.11 dict', 'url': 'https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q'}
# 如果字典不存在update中的键值对,则向字典中插入新的键值对
ages = {"ages": 25}
d.update(ages)
print("d:", d)  # d: {'name': 'Steverocket', 'desc': 'Python3.11 dict', 'url': 'https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q', 'ages': 100}

# 如果存在update中的键值对,则会修改字典中原有数据
ages2 = {"ages": 28}
d.update(ages2)
print("d:", d)  # d: {'name': 'Steverocket', 'desc': 'Python3.11 dict', 'url': 'https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q', 'ages': 28}


# 输出所有的键值
print("key:", d.keys())  # key: dict_keys(['name', 'desc', 'url', 'ages'])
print("value:", d.values())  # value: dict_values(['Steverocket', 'Python3.11 dict', 'https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q', 28])


d = {"name": "SteveRocket"}
# 判断键值对
if d["name"] == "SteveRocket":
    d["name"] = "SteveRocket02"  # 如果存在此键  则根据键修改对应的值
    d["age"] = 27  # 如果不存在此键  则添加新的键值对
print(d["name"], type(d["name"])) # SteveRocket02 <class 'str'>
print(d)  # {'name': 'SteveRocket02', 'age': 27}


d = {"name": "SteveRocket", "age": 24}
# 获取键组成的列表,类型 以及键的个数
print(d.keys(), type(d.keys()), len(d.keys()))  # dict_keys(['name', 'age']) <class 'dict_keys'> 2

# 检测字典中是否存在此键
print(d.has_key("name"))  # 此方法在py2中可使用,且输出True   py3.11中被废弃

 

总结

Python字典是一种可变的、无序的键值对集合,它可以存储任意数量的键值对,其中每个键必须是唯一的。字典是Python编程中非常常用的数据结构,可以用于存储任何类型的数据,快速访问数据,处理结构化数据等。字典的底层实现是使用哈希表,可以快速访问数据。在使用字典时,可以创建、访问、修改、删除、遍历字典中的键值对。


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

Python中的字典dict)是一种用于存储键-值对的数据结构。字典的底层实现使用了哈希表(hash table)来实现快速的查找和插入操作。 具体来说,Python字典使用了散列表(hash table)作为底层数据结构。散列表是一种通过计算键的哈希值来确定其在内存中的存储位置的数据结构。通过将键映射到其对应的哈希值,字典可以在常数时间复杂度下执行插入和查找操作。 当我们向字典中插入一个键-值对时,Python首先计算键的哈希值,并使用哈希值作为索引来查找对应的存储位置。如果该位置为空,则将键-值对存储在该位置上;如果该位置已经存在其他键-值对,则发生了哈希冲突。在发生哈希冲突时,Python使用开放寻址法或者链地址法来解决冲突。 开放寻址法是一种解决冲突的方法,它会尝试在散列表中寻找一个空闲的位置来存储冲突的键-值对。如果冲突的键-值对不能直接存储在计算得到的索引位置上,开放寻址法会根据某种策略继续寻找下一个位置,直到找到一个空闲的位置。 链地址法是另一种解决冲突的方法,它使用链表来存储冲突的键-值对。当发生哈希冲突时,Python会在冲突的位置上存储一个链表的头节点,并将冲突的键-值对添加到链表中。这样,多个键-值对可以共享同一个位置,从而解决了哈希冲突的问题。 总结起来,Python字典底层实现使用了哈希表,通过散列表来实现快速的插入和查找操作。当发生哈希冲突时,Python使用开放寻址法或者链地址法来解决冲突。这种实现方式使得字典在大部分情况下具有很高的性能,并且可以支持大量的键-值对。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值