我正在尝试使用Python在访问表中循环遍历列。我的列按升序排序。
我试图循环遍历行,当列中的值发生变化时,我想得到所有这些值的计数。在下面的示例列中,我想要计算的第一组值是M1
。当下一行更改为M21
时,我想计算M21
,直到它变为M23b
,依此类推。
我不想使用if
/ else
语句,因为有几百种不同的可能值。我在groupby
模块中使用itertools
函数,但我无法解决语法在我的示例中工作。我也试过一个像if row != row.next(): do_something
这样的傻傻的循环,但是在我的脸上爆炸了。如果有人可以建议一个解决方法或向我展示一个样本脚本,我会很感激。
示例列:
M1 M1 M1 M21 M21 M23b M23b S2 S23b S23B O1 O2 O2 O2
答案 0 :(得分:4)
您使用itertools.groupby
的直觉是正确的:
for key, group in groupby(column):
count = sum(1 for item in group) # Thanks JBernardo
# the key is what is in the column, count is the number of items
或者,如果您需要的只是计数,那就简单如下:
from collections import Counter # Python 2.7+
group_counts = Counter(column)
您可以将Counter
实施为:
from collections import defaultdict:
group_counts = defaultdict(int)
for item in column:
group_counts[item] += 1
在旧版本的Python上。
答案 1 :(得分:1)
如果您想在执行其他工作的循环中添加打印,以下内容可能会有所帮助:
from collections import Counter # or defaultdict
col_counts = Counter() # or defaultdict(int)
last_value = object() # won't show up in table
for row in access_table:
col_counts[row[field]] += 1
if row[field] != last_value:
print(col_counts[last_value])
last_value = row[field]
...
other_processing()
...