2017-02-20 2 views
-1

У меня есть список текстовых строк, которые я хочу объединить на основе одинаковых значений в правой части разделителя »:« Если значения справа идентичны, то объедините строки с добавлением левой части разделителя и сохраните только одну копию правой части разделителя.Как объединить несколько строк на основе идентичных значений

Список:

file1: apple 
file2: car 
file1: car 
file3: people 
file4: stuff 
file5: people 

Desired_list:

file1:  apple 
file2,file1: car 
file3,file5: people 
file4:  sutff 
+0

Похоже, вы могли бы использовать либо a) словарь, либо b) матрицу с файлами в виде строк, а другую - как столбцы (например, объект 'CountVectorizer'). – blacksite

+0

Я не уверен, как подойти к нему. Если бы вы могли дать подсказку, я мог бы попробовать ее. – Benjamin

+0

Мой список - это просто файл в формате, который я показал выше. – Benjamin

ответ

0

Вы хотите разделить строки на основе разделителей, а затем добавить их в список встроенных в словаре. Мне нравится использовать defaultdict.

from collections import defaultdict 
d = defaultdict(list) 
for line in textfile: 
    fname, val = line.split(':') 
    d[val.strip()].append(fname.strip()) 

for key in d: 
    print ','.join(d[key]) + ':' + key 
0

Вы можете сделать это разными способами.

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

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

В конце я перевел словарь в требуемый список.

li = ["file1: apple","file2: car","file1: car","file3: people","file4: stuff","file5: people"] 

tmp_dict = {} 
for item in li: 
    l, r = item.split(":") 
    tmp_dict[r] = tmp_dict[r] + "," + l if tmp_dict.has_key(r) else l 

res = [v + ":" + k for k,v in tmp_dict.items()] 

print res 

>>> ['file4: stuff', 'file2,file1: car', 'file1: apple', 'file3,file5: people'] 
+0

Спасибо, я попробую. – Benjamin

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