龙空技术网

Python基础学习之Dict

贝塔开飞机 102

前言:

现时朋友们对“dict在python中的用法”大约比较关心,你们都需要了解一些“dict在python中的用法”的相关资讯。那么小编在网上汇集了一些关于“dict在python中的用法””的相关文章,希望看官们能喜欢,看官们快快来了解一下吧!

1. 什么是Dict

Dict是Python语言中的一种内置类型,它是一种键值对(key-value pairs)的集合容器,可以用来存储任意数量的数据,其中每个键都是唯一的。

2. Dict底层

Dict的底层原理是哈希表(hash table),哈希表是一种高效的数据结构,可以实现快速查找、插入和删除等操作。在Dict中,Python会对每个键值对计算一个哈希值,并将其存储在对应的位置上。当我们需要查找某个键的值时,Python会先计算出该键的哈希值,并在哈希表中查找该哈希值所在的位置,从而快速定位键值对的位置,实现了快速查找的效果。

另外,Dict中的键必须是不可变对象,因为键的哈希值需要保持不变。如果我们尝试使用可变对象作为键,会导致哈希值发生变化,从而无法在哈希表中准确查找到对应的键值对。

3. Dict的创建和访问

我们可以使用大括号{}或者dict()函数创建一个Dict,如下所示:

Copy code# 用大括号创建my_dict = {'name': 'John', 'age': 30, 'gender': 'Male'}# 用dict()函数创建another_dict = dict(name='Alice', age=25, gender='Female')

这样我们就创建了两个Dict,名字分别是“my_dict”和“another_dict”,它们有不同的键和值。

我们可以使用键来访问Dict中的元素,可以通过以下方式获取其中的值:

Copy codeprint(my_dict['name'])  # 输出结果为:'John'

这样我们就可以通过键来获取对应的值了。

注意:如果我们尝试访问不在Dict中的键,Python会引发KeyError异常。

4. Dict的修改和删除

我们可以像访问元素一样来修改Dict中的元素:

Copy codemy_dict['gender'] = 'Female'  # 修改gender的值print(my_dict)  # 输出结果为:{'name': 'John', 'age': 30, 'gender': 'Female'}

在以上示例代码中,修改了“my_dict”中“gender”这个键所对应的值,将其值修改为了“Female”。

我们可以使用del关键字来删除Dict中的元素:

Copy codedel my_dict['gender']  # 删除gender这个键所对应的值print(my_dict)  # 输出结果为:{'name': 'John', 'age': 30}

在以上示例代码中,我们使用del关键字来删除了“my_dict”中“gender”这个键所对应的值。

5. Dict的遍历和排序

我们可以使用for循环来遍历Dict中的所有键和值:

Copy codefor key in my_dict:    print(key, my_dict[key])

以上示例代码会输出Dict中的所有键和值。

除了for循环外,我们还可以使用sorted函数来对Dict进行排序:

Copy codesorted_dict = sorted(my_dict.items(), key=lambda i: i[0])print(sorted_dict)

以上示例代码将Dict按键进行排序,并输出排序结果。sort()方法也可以在Python 3.7之后使用,但不保证顺序。

6. Dict的高级用法

除了创建、访问、修改、删除、遍历和排序之外,Dict还有许多其他高级用法,如提取子集、过滤元素、多字典的相同点、获取键和值等等。

提取子集

我们可以使用一个字典中的一部分数据来创建一个新的字典,如下所示:

Copy codenew_dict = {k: my_dict[k] for k in ('name', 'age')}print(new_dict)

在以上示例代码中,我们使用一个包含所有需要提取的键的元组作为筛选条件,从而提取了子集,并创建了一个新的字典。

过滤元素

我们可以使用过滤器函数来过滤出指定条件的元素,如下所示:

Copy codenew_dict = {k: v for k, v in my_dict.items() if v > 25}print(new_dict)

以上示例代码过滤出了值大于25的元素,并创建了一个新的字典。

多字典的相同点

我们可以将多个字典中相同的键提取出来,如下所示:

Copy codedict1 = {'name': 'John', 'age': 30, 'gender': 'Male'}dict2 = {'name': 'Alice', 'age': 25, 'gender': 'Female'}common_keys = set(dict1.keys()) & set(dict2.keys())  # 计算相同的键common_dict = {k: (dict1[k], dict2[k]) for k in common_keys}  # 创建新字典并包含相同的键print(common_dict)

以上示例代码计算了多个字典中相同的键,并创建了一个新的字典,该字典只包含相同的键。

获取键和值

我们可以使用keys()方法和values()方法来获取字典中的所有键和所有值。以keys()为例,如下所示:

Copy codekeys = my_dict.keys()  # 获取所有键print(keys)  # 输出结果为:dict_keys(['name', 'age'])for key in keys:    print(key, my_dict[key])# 或者for key, value in my_dict.items():    print(key, value)

以上示例代码使用keys()方法获取了“my_dict”中的所有键,并使用for循环来遍历每个键和对应的值。

字典的运算

数据字典中执行一些计算操作(比如求最小值、最大值、排序等等)

prices = {    'ACME': 45.23,    'AAPL': 612.78,    'IBM': 205.55,    'HPQ': 37.20,    'FB': 10.75}为了对字典值执行计算操作,通常需要使用 zip() 函数先将键和值反转过来。 比如,下面是查找最小和最大股票价格和股票值的代码:min_price = min(zip(prices.values(), prices.keys()))# min_price is (10.75, 'FB')max_price = max(zip(prices.values(), prices.keys()))# max_price is (612.78, 'AAPL')类似的,可以使用 zip() 和 sorted() 函数来排列字典数据:prices_sorted = sorted(zip(prices.values(), prices.keys()))# prices_sorted is [(10.75, 'FB'), (37.2, 'HPQ'),#                   (45.23, 'ACME'), (205.55, 'IBM'),#                   (612.78, 'AAPL')]
合并多个字典或映射

在Python中合并两个或多个字典可以使用以下几种方式:

使用 update() 方法:

Copy codedict1 = {'a': 1, 'b': 2}dict2 = {'c': 3, 'd': 4}dict1.update(dict2)print(dict1) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
使用 unpacking 操作符 **:
Copy codedict1 = {'a': 1, 'b': 2}dict2 = {'c': 3, 'd': 4}merged_dict = {**dict1, **dict2}print(merged_dict) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
使用字典推导式:
Copy codedict1 = {'a': 1, 'b': 2}dict2 = {'c': 3, 'd': 4}merged_dict = {key: value for d in [dict1, dict2] for key, value in d.items()}print(merged_dict) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
使用 collections 模块下的 ChainMap 类:
Copy codefrom collections import ChainMapdict1 = {'a': 1, 'b': 2}dict2 = {'c': 3, 'd': 4}merged_dict = ChainMap(dict1, dict2)print(dict(merged_dict)) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

其中,update() 方法和 unpacking 操作符 ** 的效率较高且易于理解,更常用。字典推导式和 ChainMap 类在某些情况下也很有用。

7. Dict的生成器

我们可以使用生成器(generator)来创建Dict,如下所示:

Copy codedict_obj = {num: num * num for num in range(1, 6)}  # 使用生成器创建Dictprint(dict_obj)

以上示例代码使用生成器建立Dict,并输出Dict的内容。

8. 总结

Dict类型是Python的一种内置类型,它是一个键值对(key-value pairs)的集合容器,可以用来存储任意数量的数据,其中每个键都是唯一的。

除常见的创建、访问、修改、删除、遍历、排序、提取子集、过滤元素、多字典的相同点、获取键和值之外,还可以使用生成器来创建Dict。

标签: #dict在python中的用法