内置词典与默认值
#网络开发人员 #编程 #python #dsa

在使用Python中的字典时,有两种常见的方法:使用built-in dictionary或使用Collections模块中的defaultdict。虽然这两个选项都允许您以键值格式存储和检索数据,但有一些关键差异使违约dict在许多情况下成为更好的选项。

在这篇博客文章中,我们将探讨这些差异,并提供有关如何在Python中使用字典的更有效选择的示例。

这就是为什么您应该使用defaultdict()

  • 清洁器代码
  • 避免密钥错误
  • 自定义默认值
  • 更快的执行

清洁器代码

使用defaultdict的主要好处之一是它简化了您的代码。当您使用常规dict时,您需要在尝试访问字典之前手动检查键是否存在。

例如,考虑以下代码:

my_dict = {}
my_dict['apple'] = 1

if 'apple' in my_dict:
    my_dict['apple'] += 1
else:
    my_dict['apple'] = 1

在此代码中,我们检查了my_dict中的密钥“苹果”是否存在,并增加其值。否则,我们将其值设置为1。


可以使用defaultdict编写相同的代码:

from collections import defaultdict

my_dict = defaultdict(int)
my_dict['apple'] += 1

在此代码中,我们只需访问my_dict中的“苹果”键,然后增加其值。如果密钥不存在,默认数据将创建它并将其值初始化为默认值0。

避免关键错误

使用defaultdict的另一个好处是,它避免了KeyError异常,这些异常在常规dictionary中访问不存在的键时可能会发生。

例如,考虑以下代码:

my_dict = {}
my_dict['apple'] += 1

在此代码中,我们正在尝试将MY_DICT中“ Apple”密钥的值增加。但是,由于该密钥不存在,因此该代码将引起keyError异常。


使用违约的相同代码将在不提出例外的情况下工作:

from collections import defaultdict

my_dict = defaultdict(int)
my_dict['apple'] += 1

在此代码中,如果键'apple'my_dict中不存在,则defaultdict将创建它并将其值初始化为0。然后,我们可以安全地递增其值,而不必担心提高KeyError异常。

>

自定义默认值

使用字典时,您可以通过检查键是否存在字典中来指定自定义default值。如果不存在密钥,则可以为该密钥设置一个default值。这是一个例子:

my_dict = {}
key = 'foo'

if key not in my_dict:
    my_dict[key] = 0

print(my_dict[key]) # 0

在此示例中,我们创建一个空词典my_dict。然后,我们检查字典中是否存在键'foo'。如果不存在密钥,我们为该密钥设置0的默认值。然后,我们打印与键'foo'相关的值。


通过为任何不存在的键提供默认值,defaultDict类简化了用于创建自定义默认值的代码。创建默认数据时,您可以将默认值指定为参数。这是一个例子:

from collections import defaultdict

my_dict = defaultdict(int)
key = 'foo'

print(my_dict[key]) # 0

在此示例中,我们定义了返回字符串'default'的函数default_value。然后,我们以Default_value为默认值创建一个默认文件my_dict。然后,我们尝试访问密钥“ foo”。由于键在字典中不存在,因此默认数据返回默认值'默认值'。

更快的执行

在某些情况下,默认数据可能比内置词典更快,尤其是在创建大词典时。这是因为当创建字典时,默认数据用默认值初始化所有键。这可以减少我们需要检查关键存在并从字典中检索值的次数。

import time

# Using the built-in dictionary
start_time = time.time()
my_dict = {}
for i in range(10000000):
    my_dict[i] = i
print("Built-in dictionary took", time.time() - start_time, "seconds.")

# Using defaultdict
start_time = time.time()
my_dict = defaultdict(int)
for i in range(10000000):
    my_dict[i] = i
print("Defaultdict took", time.time() - start_time, "seconds.")

此代码的输出将是:

Built-in dictionary took 1.4013495445251465 seconds.
Defaultdict took 0.9122903347015381 seconds.

综上所述

在python中使用内置字典上的默认数据始终是最好的练习,因为它简化了代码,允许不存在的键的默认值,并且在某些情况下可以更快,尤其是在创建大型词典时。这可以使我们的代码更具可读性,易于错误且更快。