AttributeError при преобразовании списка строк в список наборов

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

Тем не мение; всякий раз, когда я запускаю код, я сталкиваюсь с ошибкой, которая говорит, что.add не является определением.

def make_itemsets(L):
    item_set = {}
    for item in L:
        item_set.add(set(item))
        return item_set


      2     item_set = {}
      3     for item in L:
----> 4         item_set.add(set(item))
      5         return item_set
      6 

AttributeError: 'dict' object has no attribute 'add'

Есть идеи? Я в основном пытаюсь заставить этот список (L = ["apple","bananas","carrot"] выполнить функцию, которую я создал, чтобы вернуть новый список [{'a','p','l','e','s'},{'b','a','n','s'} и т. д. и т. д.]

1 ответ

Кажется, вы хотите list из sets вместо. Как насчет:

def make_itemsets(L):
    items = []
    for item in L:
        items.append(set(item))

    return items

Обратите внимание return утверждение вне цикла. Более короткая версия, использующая понимание списка, повлечет за собой:

def make_itemsets(L):
    return [set(item) for item in L]

Или еще более короткая версия, использующая map:

def make_itemsets(L):
    return list(map(set, L))

Вы можете бросить list(...) если вы на python2. Вызов любой из этих функций возвращает:

>>> s = make_itemsets(["apples","bananas","carrot"])
>>> s
[{'a', 'e', 'l', 'p', 's'}, {'a', 'b', 'n', 's'}, {'a', 'c', 'o', 'r', 't'}]

Для справки, если вы пытаетесь создать пустой набор, вам понадобится

item_set = set()

{} случается, чтобы создать пустой dict, Посмотрите на разобранный байт-код:

>>> dis.dis("{}")
  1           0 BUILD_MAP                0
              3 RETURN_VALUE

0 BUILD_MAP STMT создает карту (иначе dictionary). Контраст с:

>>> dis.dis("set()")
  1           0 LOAD_NAME                0 (set)
              3 CALL_FUNCTION            0 (0 positional, 0 keyword pair)
              6 RETURN_VALUE
Другие вопросы по тегам