2016-03-17 4 views
0

Я начинаю Python. Мне нужно сделать группу concatenate. Я пробовал разные способы, но не мог придумать ничего окончательного.Python - Группа Concat rows на основе критериев

У меня есть набор данных:

A Apple 
A Orange 
A Peach 
B Apricot 
C Banana 
B Cherry 
C Blueberry 

Мне нужно сгруппировать его в следующем формате

A Apple, Orange, Peach 
B Apricot, Cherry 
C Banana, Blueberry 

Любые идеи. Ваша помощь высоко ценится.

+1

когда вы говорите набор данных .. вы имеете в виду в файле или в списке или? –

+1

Взгляните на 'itertools.groupby' https://docs.python.org/2/library/itertools.html#itertools.groupby – pna

+0

Свой файл excel. около 30000 позиций – LEJ

ответ

1

Я считаю, что это решает проблему:

with open('list.txt', 'r') as f: 
    file = f.read() 
    f.close() 
    words = {} 
    for line in file.split('\n'): 
     letter, word = line.split(' ') 
     try: 
      words[letter] = words[letter] + [word] 
     except KeyError: 
      words.update({letter: [word]}) 

# id = 'A' or 'B' Etc. 
for id, word in sorted(words.items()): 
    print('{0} {1}'.format(id, word)) 

Выход:

A ['Apple', 'Orange', 'Peach'] 
B ['Apricot', 'Cherry'] 
C ['Banana', 'Blueberry'] 

Что он делает:

  1. Открывает файл .txt и читает. После этого он закрывает его.
  2. Разделяет файл в каждой строке и выполняет итерацию по каждой строке.
  3. Разделить строку на каждую букву и слово. Затем помещает эти значения в letter и word.
  4. Пытается добавить word список значений в ключ от буквы в words.
  5. Если не удалось (ключ не существует), он добавляет его как новый ключ и значение.
  6. перебирает каждый один и печатает красиво :)
+1

Также обработка файлов не слишком хороша. Вы не должны читать весь файл в памяти; лучше перебирать файловый объект. – mhawke

0

Вот решение с использованием collections.defaultdict:

from collections import defaultdict 

with open('input') as f: 
    d = defaultdict(list) 
    for key, word in (line.split() for line in f): 
     d[key].append(word) 

    for k in sorted(d): 
     print('{} {}'.format(k, ', '.join(sorted(d[k])))) 

Выход

 
A Apple, Orange, Peach 
B Apricot, Cherry 
C Banana, Blueberry 

defaultdict делает сбор предметов в списки гораздо проще, чем управлять стандартным словарем, потому что вы не знаете чтобы проверить, находится ли ключ уже в словаре, прежде чем добавлять его.

Другим вариантом является использование itertools.groupby, но для этого требуются данные в порядке и поэтому потребует, чтобы вы сортировали файл перед использованием.

Смежные вопросы