前言:
现时朋友们对“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中的用法