Беспокоящее странное поведение / ошибка в Python itertools groupby?

я используюitertools.groupby проанализировать короткий текстовый файл с разделителями табуляции. текстовый файл имеет несколько столбцов, и все, что я хочу сделать, это сгруппировать все записи, которые имеют определенное значениеx в определенном столбце. Код ниже делает это для столбца с именемname2, ища значение в переменнойx, Я пытался сделать это с помощьюcsv.DictReader а такжеitertools.groupby, В таблице 8 строки, соответствующие этому критерию, поэтому 8 записей должны быть возвращены. Вместоgroupby возвращает два набора записей, один с одной записью, а другой с 7, что кажется неправильным поведением. Я делаю сопоставление вручную ниже на тех же данных и получаю правильный результат:

import itertools, operator, csv
col_name = "name2"
x = "ENSMUSG00000002459"
print "looking for entries with value %s in column %s" %(x, col_name)
print "groupby gets it wrong: "
data = csv.DictReader(open(f), delimiter="\t", fieldnames=fieldnames)
for name, entries in itertools.groupby(data, key=operator.itemgetter(col_name)):
    if name == "ENSMUSG00000002459":
        wrong_result = [e for e in entries]
        print "wrong result has %d entries" %(len(wrong_result))
print "manually grouping entries is correct: "
data = csv.DictReader(open(f), delimiter="\t", fieldnames=fieldnames)
correct_result = []
for row in data:
    if row[col_name] == "ENSMUSG00000002459":
        correct_result.append(row)
print "correct result has %d entries" %(len(correct_result))

Я получаю вывод:

looking for entries with value ENSMUSG00000002459 in column name2
groupby gets it wrong: 
wrong result has 7 entries
wrong result has 1 entries
manually grouping entries is correct: 
correct result has 8 entries

что происходит здесь? Еслиgroupby действительно группировка, кажется, я должен получить только один набор записей вx, но вместо этого он возвращает два. Я не могу понять это.РЕДАКТИРОВАТЬ: Ах, понял, это должно быть отсортировано.

Ответы на вопрос(3)

Ваш ответ на вопрос