Python - 记录列表中的出现计数器
在本文中,我们将解释如何使用 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 是记录中唯一元素的大小。因为我们只存储唯一元素来获取计数。
结论
在本文中,我们成功地在给定的记录列表中找到了重复属性的出现。我们在本文中使用了两种技术,并理解了每种方法背后的逻辑。这两种技术对于查找出现计数器都是高效且有效的。