После выполнения некоторых операций я получаю list следующим образом:

FreqItemset(items=[u'A_String_0'], freq=303)
FreqItemset(items=[u'A_String_0', u'Another_String_1'], freq=302)
FreqItemset(items=[u'B_String_1', u'A_String_0', u'A_OtherString_1'], freq=301)

Я хотел бы удалить из списка все элементы, начиная с A_String_0 , но я хотел бы сохранить другие элементы (не имеет значения, существует ли A_String_0 в середине или в конце элемента)

Поэтому в приведенном выше примере удалите строки 1 и 2, оставьте строку 3

Я старался

 filter(lambda a: a != 'A_String_0', result)

А также

result.remove('A_String_0')

Все это мне не помогает

1
Toren 16 Дек 2015 в 18:58

3 ответа

Лучший ответ

Это так просто:

from pyspark.mllib.fpm import FPGrowth

sets = [
    FPGrowth.FreqItemset(
       items=[u'A_String_0'], freq=303),
    FPGrowth.FreqItemset(
        items=[u'A_String_0', u'Another_String_1'], freq=302),
    FPGrowth.FreqItemset(
        items=[u'B_String_1', u'A_String_0', u'A_OtherString_1'], freq=301)
]

[x for x in sets if x.items[0] != 'A_String_0']
## [FreqItemset(items=['B_String_1', 'A_String_0', 'A_OtherString_1'], freq=301)]

На практике было бы лучше отфильтровать перед сбором:

filtered_sets = (model
    .freqItemsets()
    .filter(lambda x: x.items[0] != 'A_String_0')
    .collect())
2
zero323 16 Дек 2015 в 16:25

Как насчет result = result if result[0] != 'A_String_0' else result[1:]?

2
wpercy 16 Дек 2015 в 16:04

Похоже, вы используете список с именем FreqItemset . Однако название предполагает, что вы должны использовать набор вместо списка .

Таким образом, вы можете получить набор искомых пар строка, частота. Например:

>>> d = { "the": 2, "a": 3 }
>>> d[ "the" ]
2
>>> d[ "the" ] = 4
>>> d[ "a" ]
3
>>> del d[ "a" ]
>>> d
{'the': 4}

Вы можете легко получить доступ к каждому слову (которое является ключом словаря), изменить его значение (частоту появления) или удалить его. Все операции исключают доступ ко всем элементам списка, поскольку это словарь, т. Е. Его производительность хорошая (во всяком случае, лучше, чем использование списка).

Просто мои два цента.

2
Baltasarq 16 Дек 2015 в 16:09