Python - разделить список на несколько списков по ключевому слову - PullRequest
0 голосов
/ 17 июня 2020

У меня есть огромный список python, который я получил в результате работы алгоритма K означает кластеризацию. Вот код.

clusterlist = []
for i in range(true_k):
clusterlist.append('\nCluster %d:' % i),
for ind in order_centroids[i]:
    clusterlist.append('%s' % terms[ind])

Здесь строковое значение «Cluster% d» добавляется к списку при запуске нового кластера. Я хочу разбить этот окончательный список кластеров на несколько списков на основе ключевого слова «кластер», или он действительно может храниться в нескольких списках, а не в одном списке кластеров? Вот пример списка вывода:

['\nCluster 0:', 'need', 'zize6kysq2', 'fleming', 'finale', 'finally', 'finals', 'fined', 'finisher', 'firepower', 'fit', 'fitness', 'flaw', 'flaws', 'flexibility', 'ground', 'fluffed', 'fluke', 'fn0uegxgss', 'focussed', 'foot', 'forget', 'forgot', 'form', 'format', 'forward', 'fought', 'final', 'filter', 'figures', 'fight', 'fascinating', 'fashioned', 'fast', 'fastest', 'fat', 'fatigue', 'fault', 'fav', 'featured', 'feel', 'feeling', '\nCluster 1:', 'feels', 'fees', 'feet', 'felt', 'ferguson', 'fewest', 'ffc4pfbvfr', 'ffs', 'field', 'fielder', 'fielders', 'fielding', 'fow', 'fow_hundreds', 'frame', 'gingers', 'gives', 'giving', 'glad', 'glenn', 'gloves', 'god', 'gods', 'goes', 'going', 'gois','\nCluster 2:', 'gon', 'gone', 'good', 'got', 'grand', 'grandhomme', 'grandmom', 'grandpa', 'grass']

Я пробовал это решение SO, используя следующий код, но оно не сработало.

import more_itertools as mit
result = list(mit.split_at(clusterlist, pred=lambda x: set(x) & {"Cluster"}))

Это дало следующая ошибка:

ValueError: not enough values to unpack (expected 3, got 1)

Пожалуйста, предоставьте решение. Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Вы всегда можете использовать список списков для хранения кластеров:

clusterlists = []
for i in range(true_k):
    dummy_list  = []
    for ind in order_centroids[i]:
        dummy_list.append('%s' % terms[ind])
    clusterlists.append(dummy_list)

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

1 голос
/ 17 июня 2020

Итеративное решение (ожидается, что список будет начинаться с элемента кластера):

d = {}
for item in a: 
    if item.startswith("\nCluster"): 
        current_cluster = item[1:-1]  # cut \n and : from cluster name 
        d[current_cluster] = []
    else: 
        d[current_cluster].append(i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...