2016-09-24 1 views
0

I eine Liste der Wörterbücher haben zB:Iteration über eine Unterliste der Wörterbücher -Python

list_d = [{"a":1},{"b":2,"c":3}] 

(Fall 1)

for item in list_d: 
    # add values of each sub-list's dicts 

(Fall 2)

for item in list_d[1]: 
    # add values of the specific sub-list of dict 

(case1) Gibt die Summe des Diktatwerts jeder Unterliste zurück s.

(case2) gibt nur die Schlüssel der Wörterbücher zurück.

Gibt es einen effizienten Weg, um die Wörterbücher der Unterliste (case2) zu bekommen, um die Werte hinzuzufügen?

+3

Bitte überprüfen Sie Ihre Terminologie; Was meinst du mit * Unter-Liste *, ein Element vielleicht? Was meinst du mit * hinzufügen *? Was sind die Wörterbücher eines Wörterbuchs? Was ist das erwartete Ergebnis? –

+0

@AnttiHaapala Ja, ich meinte das Element der Liste. Um es anders auszudrücken, meine Frage ist: Anstatt über die Liste zu iterieren und die Summe jedes Elements zu nehmen, habe ich mich gefragt, ob ich nur das Diktat des zweiten Elements {"b": 2, "c": 3} und Wenden Sie eine Funktion auf die Werte dieses Wörterbuchs an, um in diesem Fall seine Werte hinzuzufügen (expected_result = 5). Vielen Dank – aioakei

Antwort

0

Hier ist eine Möglichkeit, es zu tun:

reduce(lambda x,y: x + sum(y.values()), list_d, 0) 

Das heißt, beginnend mit 0 (als erste x), fügen Sie die Summe aller Werte in jedem dict innerhalb list_d.

Hier ist eine andere Art und Weise:

sum(sum(x.values()) for x in list_d) 

Das heißt, ergibt die Summe der (Summe der Werte für jede dict in list_d).

0

Wie Antti darauf hinweist, ist unklar, was Sie verlangen. Ich würde Ihnen empfehlen, für Functional programming

Betrachten Sie die folgenden Beispiele zu den integrierten Tools in Python, einen Blick:

from operator import add 

list_d = [{"a":1},{"b":2,"c":3}] 

case_1 = map(lambda d: sum(d.values()), list_d) 
case_2 = reduce(add, map(lambda d: sum(d.values()), list_d)) 
Verwandte Themen