Python - 记录列表中的出现计数器

pythonserver side programmingprogramming

在本文中,我们将解释如何使用 Python 计算给定记录列表中元素的出现或重复次数。有时我们需要对给定数据集中的重复项进行计数,因此本文将有助于解决此类问题。

理解问题

我们的问题是使用 Python 编程语言计算给定记录列表中重复项的数量。因此,基本上我们必须显示给定记录列表中相同或相同项的计数结果。让我们通过一个例子来理解这个问题:

上述问题的逻辑

为了解决这个问题,我们使用了两种技术。第一种方法将使用用户定义函数,第二种方法将使用 Python 中 collections 模块的计数器方法。为了理解每种技术的完整逻辑,我们将深入研究算法。

第一种方法 - 算法

将使用循环遍历每个记录来计算给定记录列表中的出现次数,在循环中我们将检查所需的值或项目。然后我们将维护字典以保存迭代过程中出现的不同项目或值的计数。如果找到了所需的值,我们将更新所创建字典中的计数。

  • 步骤 1 - 定义名为occlusion_counter 的函数,并将数据和键作为输入传递到函数内部。

  • 步骤 2 - 然后启动一个计数器字典,该字典最初为空,用于存储函数的结果。

  • 步骤 3 - 现在对数据字典的值启动循环。在循环中,我们将使用 record.get() 方法获取每个键的值。

  • 步骤 4 - 如果计数器字典中尚不存在该值,则我们将计数加 1。否则将值加 1。

  • 步骤 5 - 对数据记录中的所有项目重复上述步骤。

示例

# 定义函数来计数重复的项目
def occurrence_counter(data, key):
   counter = {}
   for record in data:
      value = record.get(key)
      if value is not None:
         counter[value] = counter.get(value, 0) + 1
   return counter

#初始化记录列表
data = [
   {'color_name': 'Cyan', 'code': '#00FFFF'},
   {'color_name': 'Red', 'code': '#FF0000'},
   {'color_name': 'Cyan', 'code': '#00FFFF'},
   {'color_name': 'Red', 'code': '#FF0000'},
   {'color_name': 'Blue', 'code': '#0000FF'},
]

# 定义要计数的键
key = 'color_name'
occurrences = indication_counter(data, key)
print("给定数据的出现次数计数器:\n",occurrences)

输出

给定数据的出现次数计数器:
{'Cyan': 2, 'Red': 2, 'Blue': 1}

第二种方法 - 算法

在这种方法中,我们将使用 collections 模块的计数器类。借助此类,我们将创建一个计数器对象,然后从给定的记录列表中更新所需的值。

  • 步骤 1 - 第一步是从 Python 的 collections 模块导入 Counter 类。

  • 步骤 2 - 然后将函数定义为occurrence_counter,并在函数中传递两个参数作为data和key。

  • 步骤 3 - 然后我们将启动空的counts对象来存储所需的结果。

  • 步骤 4 - 在此步骤中将启动一个循环,逐一遍历数据的属性。

  • 步骤 5 - 然后我们将从数据记录中提取所需的值。并相应地更新counts对象。

示例

# 导入Counter类
from collections import Counter
# 定义函数来计算发生次数
def occurrence_counter(data, key):
   counts = Counter()
   for record in data:
      value = record.get(key)
      if value is not None:
         counts[value] += 1
   return counts

#初始化数据列表
data = [
   {'color_name': 'Cyan', 'code': '#00FFFF'},
   {'color_name': 'Blue', 'code': '#0000FF'},
   {'color_name': 'Cyan', 'code': '#00FFFF'},
   {'color_name': 'Red', 'code': '#FF0000'},
   {'color_name': 'Blue', 'code': '#0000FF'},
]

# 定义需要计数的键
key = 'color_name'

# 调用函数
occurrences = indication_counter(data, key)
print(occurrences)

输出

Counter({'Cyan': 2, 'Blue': 2, 'Red': 1})

复杂度

完成上述两段代码所需的时间均为 O(n),其中 n 是给定输入记录列表的大小。因为我们在两段代码中使用循环迭代给定记录一次以查找所需的键。两种技术的空间复杂度均为 O(m),其中 m 是记录中唯一元素的大小。因为我们只存储唯一元素来获取计数。

结论

在本文中,我们成功地在给定的记录列表中找到了重复属性的出现。我们在本文中使用了两种技术,并理解了每种方法背后的逻辑。这两种技术对于查找出现计数器都是高效且有效的。


相关文章