用于根据特定条件对项目进行计数的Python代码?

时间:2018-09-28 03:16:10

标签: python python-3.x counting

我有以下数据:

Switch1
int1
int2
int3
int4
Switch2
int1
int2
int3
int4
int5
int6
int7
int8
Switch3
int1
int2
int3
int4
int5
int6
int7

请使用Python 3代码帮助计算每个Switch(Switch1、2、3)下的所有项目。如果这样的话,我确实将开关列表放在一个单独的文件中。

3 个答案:

答案 0 :(得分:2)

假设文件内容存储在变量s中,则可以将re.split与对迭代器的dict理解一起使用,以获取由开关名称索引的dict中的计数:

import re
i = iter(re.split('(Switch\d+)\n', s)[1:])
print({k: len(v.splitlines()) for k, v in zip(i, i)})

使用示例输入,将输出:

{'Switch1': 4, 'Switch2': 8, 'Switch3': 7}

答案 1 :(得分:2)

遍历文件。每行要么是一个新的开关,要么是要计数的东西:

switches = {}
latest = None
with open('data.txt') as f:
    for line in f:
        if line.startswith('Switch'):
            latest = line.strip()
        else:
            switches[latest] = switches.get(latest, 0) + 1

或者,您可以使用collections.defaultdict而不是get来确保为每个新键正确填充字典:

from collections import defaultdict

switches = defaultdict(int)
with open('data.txt') as f:
    for line in f:
        if line.startswith('Switch'):
            latest = line.strip()
        else:
            switches[latest] += 1

答案 2 :(得分:-1)

我会到达每一行,并且每次遇到包含字符串“ Switch”的行时,我都会计算下一行以及所有后续行,直到到达包含“ Switch”的另一行,然后将其重置为您的物品计数器并重复。