📜  Python中的默认字典

📅  最后修改于: 2022-05-13 01:55:08.182000             🧑  作者: Mango

Python中的默认字典

Python中的字典是数据值的无序集合,用于像地图一样存储数据值。与仅包含单个值作为元素的其他数据类型不同,字典包含键值对。在 Dictionary 中,键必须是唯一且不可变的。这意味着Python元组可以是键,而Python列表不能。可以通过在花括号 {} 中放置一系列元素来创建字典,并用“逗号”分隔。
例子:

Python3
# Python program to demonstrate
# dictionary
  
  
Dict = {1: 'Geeks', 2: 'For', 3: 'Geeks'} 
print("Dictionary:") 
print(Dict)
print(Dict[1])
  
# Uncommenting this print(Dict[4])
# will raise a KeyError as the
# 4 is not present in the dictionary


Python3
# Python program to demonstrate
# defaultdict
  
  
from collections import defaultdict
  
  
# Function to return a default
# values for keys that is not
# present
def def_value():
    return "Not Present"
      
# Defining the dict
d = defaultdict(def_value)
d["a"] = 1
d["b"] = 2
  
print(d["a"])
print(d["b"])
print(d["c"])


Python3
# Python program to demonstrate
# default_factory argument of 
# defaultdict
  
  
from collections import defaultdict
  
      
# Defining the dict and passing 
# lambda as default_factory argument
d = defaultdict(lambda: "Not Present")
d["a"] = 1
d["b"] = 2
  
print(d["a"])
print(d["b"])
print(d["c"])


Python3
# Python program to demonstrate
# defaultdict
  
  
from collections import defaultdict
  
      
# Defining the dict
d = defaultdict(lambda: "Not Present")
d["a"] = 1
d["b"] = 2
  
# Provides the default value 
# for the key
print(d.__missing__('a'))
print(d.__missing__('d'))


Python3
# Python program to demonstrate
# defaultdict
  
  
from collections import defaultdict
  
  
# Defining a dict
d = defaultdict(list)
  
for i in range(5):
    d[i].append(i)
      
print("Dictionary with values as list:")
print(d)


Python3
# Python program to demonstrate
# defaultdict
   
   
from collections import defaultdict
   
   
# Defining the dict
d = defaultdict(int)
   
L = [1, 2, 3, 4, 2, 4, 1, 2]
   
# Iterate through the list
# for keeping the count
for i in L:
       
    # The default value is 0
    # so there is no need to 
    # enter the key first
    d[i] += 1
       
print(d)


输出:

Dictionary:
{1: 'Geeks', 2: 'For', 3: 'Geeks'}
Geeks
Traceback (most recent call last):
  File "/home/1ca83108cc81344dc7137900693ced08.py", line 11, in 
    print(Dict[4])
KeyError: 4

有时,当引发 KeyError 时,它可能会成为一个问题。为了克服这个问题, Python引入了另一个字典,例如容器,称为Defaultdict ,它存在于 collections 模块中。
注意:有关详细信息,请参阅Python字典。

默认字典

Defaultdict是一个容器,类似于模块集合中存在的字典。 Defaultdict 是返回类字典对象的字典类的子类。除了 defaultdict 从不引发 KeyError 之外,字典和 defaultdict 的功能几乎相同。它为不存在的键提供默认值。

例子:

Python3

# Python program to demonstrate
# defaultdict
  
  
from collections import defaultdict
  
  
# Function to return a default
# values for keys that is not
# present
def def_value():
    return "Not Present"
      
# Defining the dict
d = defaultdict(def_value)
d["a"] = 1
d["b"] = 2
  
print(d["a"])
print(d["b"])
print(d["c"])

输出:

1
2
Not Present 

defaultdict的内部工作

Defaultdict 在标准字典操作的基础上增加了一个可写的实例变量和一个方法。实例变量是 default_factory 参数,提供的方法是 __missing__。

  • Default_factory:它是一个返回定义字典的默认值的函数。如果此参数不存在,则字典会引发 KeyError。
    例子:

Python3

# Python program to demonstrate
# default_factory argument of 
# defaultdict
  
  
from collections import defaultdict
  
      
# Defining the dict and passing 
# lambda as default_factory argument
d = defaultdict(lambda: "Not Present")
d["a"] = 1
d["b"] = 2
  
print(d["a"])
print(d["b"])
print(d["c"])

输出:

1
2
Not Present
  • __missing__():该函数用于为字典提供默认值。此函数将 default_factory 作为参数,如果此参数为 None,则会引发 KeyError,否则它会为给定键提供默认值。这个方法基本上是在找不到请求的key的时候被dict类的__getitem__()方法调用的。 __getitem__() 引发或返回 __missing__() 返回的值。方法。
    例子:

Python3

# Python program to demonstrate
# defaultdict
  
  
from collections import defaultdict
  
      
# Defining the dict
d = defaultdict(lambda: "Not Present")
d["a"] = 1
d["b"] = 2
  
# Provides the default value 
# for the key
print(d.__missing__('a'))
print(d.__missing__('d'))

输出:

Not Present
Not Present 

使用 List 作为 default_factory

当列表类作为 default_factory 参数传递时,将使用 list 的值创建一个 defaultdict。
例子:

Python3

# Python program to demonstrate
# defaultdict
  
  
from collections import defaultdict
  
  
# Defining a dict
d = defaultdict(list)
  
for i in range(5):
    d[i].append(i)
      
print("Dictionary with values as list:")
print(d)

输出:

Dictionary with values as list:
defaultdict(, {0: [0], 1: [1], 2: [2], 3: [3], 4: [4]})

使用 int 作为 default_factory

当 int 类作为 default_factory 参数传递时,会创建一个默认值为零的 defaultdict。
例子:

Python3

# Python program to demonstrate
# defaultdict
   
   
from collections import defaultdict
   
   
# Defining the dict
d = defaultdict(int)
   
L = [1, 2, 3, 4, 2, 4, 1, 2]
   
# Iterate through the list
# for keeping the count
for i in L:
       
    # The default value is 0
    # so there is no need to 
    # enter the key first
    d[i] += 1
       
print(d)

输出:

defaultdict(, {1: 2, 2: 3, 3: 1, 4: 2})