2016-04-11 11 views
-6

Hallo Ich kann nicht diese Funktion zu erhalten scheinen ich habe eine ListePython anhängt Variablen in die Liste

a = [{'Name': 150,'number': 100},{'Name': 190, 'number': 200},{'Name': 190, 'number': 300}] 

ich brauche einige Variablen anhängen, aber ich erhalte immer Fehler

a.append ({'Name': + Name + ',' + 'number'+ ':' + Number}) 
TypeError: bad operand type for unary +: 'str' 

Voll Code :

a = [{'Name': 150,'number': 100},{'Name': 190, 'number': 200},{'Name': 190, 'number': 300}] 
    Name = '150' 
    number = '10' 

    a.append ({'Name': + Name + ',' + 'number'+ ':' + Number}) 


    def get_number(name): 
      return lambda x: x['number'] if x['Name']==name else 0 

    names = sorted(set(map(lambda x: x['Name'], a))) 
    result = [{'Name':name,'number':sum(map(get_number(name), a))} for name in names] 

    string = str(result) 
    remove = "[{}],'" 
    for i in range (0,len(remove)): 
      string =string.replace(remove[i],"") 
    b = string 

    print b 

Wie füge ich die Daten an diese Liste an?

+2

Warum konvertieren Sie die Liste in eine Zeichenfolge und verwenden Sie dann Zeichenfolge Operationen, um ein Element zu entfernen ?! – ThiefMaster

+0

Ich konvertiere zu einer Liste, weil ich Namen und Nummern bekomme. die gleichen Namen müssen hinzugefügt werden, so kann ich die Summe für den Namen sehen und dann zu einem XML-Element hinzufügen – user2433624

Antwort

2

Sie versuchen, ein Wörterbuch anzuhängen. Dies sollte funktionieren:

a.append({'Name': Name, 'number' : Number}) 

den Stil des Schreibens Sie einige sehr nette Intuition verwendet wird, verwendet, aber das ist nicht, wie das funktioniert :) Wörterbücher sich automatisch in der Art und Weise formatiert werden die anderen heraus verlegt sind, müssen Sie nur füttere sie mit den richtigen Schlüsseln und Werten.

Der Grund, warum Sie einen Fehler erhalten haben, war wegen der : Sie in den Vordergrund gestellt. Das sagt Python, dass Sie ein Wörterbuch verwenden - aber sofort danach setzen Sie eine +. Jetzt schaut Python nach rechts, sieht eine Zeichenkette, denkt "Okay, du versuchst zwei Strings hinzuzufügen", schaut nach links und sieht einen Doppelpunkt, der keine Zeichenkette ist. Python ist verwirrt: Es braucht etwas, das als eine Zeichenfolge auf der linken Seite interpretiert werden kann, sonst wird das nicht funktionieren. Es löst also einen Fehler aus.

Bearbeiten: Korrektur über den unären Operator, siehe @PM 2Ring's Kommentare!

+1

"schaut nach links und sieht einen Doppelpunkt, der keine Zeichenkette ist". Nein. Der Parser hat sich bereits mit dem Doppelpunkt beschäftigt und jetzt sucht er nach einem gültigen Ausdruck, um einen Wert von zu erstellen, um ihn mit dem '' Name''-Schlüssel zu verbinden.Es versucht nicht, das '+' als Summierungsoperator zu interpretieren (was mit Strings String-Verkettung bedeutet), es interpretiert es als [unary positive] (https://en.wikipedia.org/wiki/Unary_operation#Unary_negative_and_positive) Operator (wie die Fehlermeldung angibt), aber dieser Operator ist nicht für Strings definiert. –

+1

(Forts.) Unäre positive _is_ für Zahlen definiert, so können wir Dinge tun wie 'a = + 5' und' a = + b', wobei 'b' eine Zahl ist. Richtig, das ist ziemlich nutzlos, aber es ist symmetrisch zu 'a = -b', und es ist billig, die Handhabung von unary positive in den Parser zu bringen. :) –

1

Sie brauchen nicht + hier zu verwenden: einfach den Variablenwert nach dem Schlüssel setzen, wie Sie haben, wenn Sie zuerst den Wert von a erklärt:

a.append ({'Name': Name, 'number': Number}) 

+ ist zum Verbinden von Strings oder Hinzufügen von Zahlen, aber hier versuchen wir ein Wörterbuch zu erstellen. Das Format, das zu tun ist:

{"Key": value, "Another Key": value, ...} 

Die + Zeichen sind nicht erforderlich, weil Sie nicht sind etwas verbindet, sind Sie nur ein Wörterbuch zu schaffen mit Python eingebaute Syntax.

+0

Danke für die Erklärung das hat mir sehr geholfen. – user2433624

0

In Ihrem Code ist der Fehler offensichtlich und auch der TypeError sagt Ihnen eindeutig, wo der Fehler ist. Sie müssen das '+' nicht in der Anweisung verwenden. Bearbeiten Sie einfach den Code wie folgt aussehen:

a.append ({ 'Name': Name, 'Zahl': Anzahl})

Die '+' wird verwendet, Strings anhängen und in Ihrem Fall, dass Sie Zuweisen einer Variablen zu einem Wert. Ich hoffe es hilft. :)

Verwandte Themen