字典是Python中的一个无序数据值集合,用于存储像映射这样的数据值。字典存储的是键-值对,而不像其他数据类型那样存储单个值作为元素。字典中的键必须是唯一且不可变的。也就是说,Python元组可以作为键,但Python列表不能作为字典中的键。我们可以通过将一系列元素放在花括号{}内来创建一个字典,逗号","可以分隔值。

示例1:

Dict_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D'}  
print ("Dictionary: ")  
print (Dict_1)  
print ("key pair 1: ", Dict_1[1])  
print ("key pair 3: ", Dict_1[3])  

输出:

Dictionary: 
{1: 'A', 2: 'B', 3: 'C', 4: 'D'}
key pair 1: A
key pair 3: C

但如果我们尝试打印第5个键值,将会出现错误,因为"Dict_1"不包含第5个键值。

示例2:

Dict_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D'}  
print ("Dictionary: ")  
print (Dict_1)  
print ("key pair 5: ", Dict_1[5])  

输出:

Dictionary: 
{1: 'A', 2: 'B', 3: 'C', 4: 'D'}
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
 in 
      2 print ("Dictionary: ")
      3 print (Dict_1)
----> 4 print ("key pair 5: ", Dict_1[5])

KeyError: 5

每当引发KeyError时,这可能会成为用户的问题。我们可以通过使用Python的另一个字典来克服这个错误,它就像一个容器,被称为Defaultdict,用户可以在'collections'模块中找到这个字典。

defaultdict

Defaultdict是Python中的一个字典,它就像一个容器,存在于'collections'模块中。它是字典类的一个子类,用于返回类似字典的对象。Defaultdict和普通字典具有相同的功能,唯一的区别是Defaultdict不会引发任何KeyError,因为它为不存在于用户创建的字典中的键提供了默认值。

语法:

defaultdict(default_factory)  

参数:

  • default_factory: default_factory()函数返回用户为其定义的字典的默认值。如果没有提供此参数,字典将引发KeyError。

示例:

from collections import defaultdict as DD  
# Function for returning a default values for the  
# keys which are not present in the dictionary  
def default_value():  
    return "This key is not present"  
       
# Now, we will define the dict  
dict_1 = DD(default_value)  
dict_1["ABC"] = 1  
dict_1["DEF"] = 2  
dict_1["GHI"] = 3  
dict_1["JKL"] = 4  
print ("Dictionary: ")  
print (dict_1)  
print ("key pair 1: ", dict_1["ABC"])  
print ("key pair 3: ", dict_1["GHI"])  
print ("key pair 5: ", dict_1["MNO"])  

输出:

Dictionary: 
defaultdict(, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 4})
key pair 1:  1
key pair 3:  3
key pair 5:  This key is not present

defaultdict的内部工作原理

当使用Defaultdict时,除了标准字典操作外,我们还获得了一个额外的可写实例变量和一个方法。可写实例变量是default_factory参数,而missing是方法。

  • default_factory: default_factory()函数返回用户为其定义的字典的默认值。

示例:

from collections import defaultdict as DD  
dict_1 = DD(lambda: "This key is not present")  
dict_1["ABC"] = 1  
dict_1["DEF"] = 2  
dict_1["GHI"] = 3  
dict_1["JKL"] = 4  
print ("Dictionary: ")  
print (dict_1)  
print ("key value 1: ", dict_1["ABC"])  
print ("key value 3: ", dict_1["GHI"])  
print ("key value 5: ", dict_1["MNO"])  

输出:

Dictionary: 
defaultdict( at 0x0000019EFC4B58B0>, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 4})
key value 1:  1
key value 3:  3
key value 5:  This key is not present
  • missing(): missing()函数用于为字典提供默认值。missing()函数将default_factory作为参数,如果将参数设置为None,将引发KeyError;否则,它将为给定键提供默认值。这个方法本质上是在字典类的getitem()函数中被调用的,当请求的键未找到时,getitem()函数引发或返回在missing()函数中存在的值。

示例:

from collections import defaultdict as DD  
dict_1 = DD(lambda: "This key is not present")  
dict_1["ABC"] = 1  
dict_1["DEF"] = 2  
dict_1["GHI"] = 3  
dict_1["JKL"] = 4  
print ("Dictionary: ")  
print (dict_1)  
print ("key value 1: ", dict_1.__missing__('ABC'))  
print ("key value 4: ", dict_1["JKL"])  
print ("key value 5: ", dict_1.__missing__('MNO')) 

输出:

Dictionary: 
defaultdict( at 0x0000019EFC4B5670>, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 4})
key value 1:  This key is not present
key value 4:  4
key value 5:  This key is not present

如何将"List"用作default_factory

我们可以将列表类作为default_factory参数,它将创建一个带有列表格式的默认值的defaultdict。

示例:

from collections import defaultdict as DD  
# Defining a dictionary  
dict_1 = DD(list)  
   
for k in range(7, 12):  
    dict_1[k].append(k)  
       
print ("Dictionary with values as list:")  
print (dict_1)  

输出:

Dictionary with values as list:
defaultdict(<class 'list'>, {7: [7], 8: [8], 9: [9], 10: [10], 11: [11]})

如何将"int"用作default_factory

我们可以将整数类作为default_factory参数,它将创建一个默认值设置为零的defaultdict。

示例:

from collections import defaultdict as DD  
    
    
# Defining the dict  
dict_1 = DD(int)  
    
J = [1, 2, 3, 4, 2, 4, 1, 2]  
    
# Now, we will iterate through the list "J"  
# for keeping the count  
for k in J:  
        
    # As, The default value is 0  
    # so we do not need to  
    # enter the key first  
    dict_1[k] += 1  
        
print(dict_1)  

输出:

defaultdict(<class 'int'>, {1: 2, 2: 3, 3: 1, 4: 2})

结论

在本教程中,我们讨论了Python中的defaultdict以及如何使用default_factory参数在defaultdict上执行不同的操作。

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter指南, Tkinter学习指南, Tkinter进阶教程, Tkinter编程