2017-09-11 2 views
0

Ich versuche eine Funktion zu schreiben, um die Ergebnisse einer Schleife zu einer Menge hinzuzufügen, im Grunde genommen eine Liste und set() zu verwenden, um alle doppelten Buchstaben herauszunehmen die Zeichenfolgen in der Liste.AttributeError beim Konvertieren einer Liste von Strings in eine Liste von Sätzen

Jedoch; Wann immer ich den Code ausführe, habe ich einen Fehler gefunden, der besagt, dass .add keine dict-Definition ist.

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' 

Irgendwelche Ideen? Ich versuche im Grunde, diese Liste zu erhalten (L = ["Äpfel", "Bananen", "Karotte"]), um eine Funktion auszuführen, die ich erstellt habe, um eine neue Liste [{'a', 'p', ' l ',' e ',' s '}, {' b ',' a ',' n ',' s 'usw. usw.]

+0

Wenn Ihre Frage ausreichend beantwortet wurde, können Sie [akzeptieren] (https://stackoverflow.com/help/someone-answers) eine Antwort geben. Vielen Dank. –

Antwort

2

Es scheint, als ob Sie statt dessen einen list von sets möchten über:.

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

    return items 

Notiere die return Anweisung außerhalb der Schleife eine kürzere Version eine Liste Verständnis mit sich bringen würde:

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

Oder eine noch kürzere Version mit ein map:

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

Sie können die list(...) fallen, wenn Sie auf python2 sind. Der Aufruf eines dieser Funktionen zurückgibt:

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

als Referenz, wenn Sie versuchen, eine leere Menge zu erstellen, müssen Sie

item_set = set() 

{} geschieht ein leeres dict erstellen . Werfen Sie einen Blick auf die zerlegten Bytecode:

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

Die 0 BUILD_MAP Anw erstellt eine Karte (aka, dict ionary). Im Gegensatz dazu:

>>> dis.dis("set()") 
    1   0 LOAD_NAME    0 (set) 
       3 CALL_FUNCTION   0 (0 positional, 0 keyword pair) 
       6 RETURN_VALUE 
Verwandte Themen