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 создает карту (иначе dict
ionary). Контраст с:
>>> dis.dis("set()")
1 0 LOAD_NAME 0 (set)
3 CALL_FUNCTION 0 (0 positional, 0 keyword pair)
6 RETURN_VALUE