2012-04-11 16 views
2

So, hier ist mein Problem, ich habe ein Wörterbuch mit folgendem Schlüssel => Werte:Wörterbuch Werte in Python Hinzufügen von Werten

6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:политичка -> 2 
6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:државата -> 2 
6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:енергично -> 1 
1caa60ebf9459d9cd406f1a03e1719b675dcfaad78292edc7e4a56be:полициска -> 1 

Ich habe diesen Code der Schlüssel zeigen benötigt:

for key, value in count_db.iteritems(): 
     print key[:56] 

so, jetzt habe ich:

6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002 -> 2 
6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002 -> 2 
6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002 -> 1 
1caa60ebf9459d9cd406f1a03e1719b675dcfaad78292edc7e4a56be -> 1 

ich brauche sie in fusionieren:

6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002 -> 5 
1caa60ebf9459d9cd406f1a03e1719b675dcfaad78292edc7e4a56be -> 1 

Ich habe das gemacht, aber ich Erfolg habe es nicht richtig zu tun:

length_dic=len(count_db.keys()) 
for key, value in count_db.iteritems(): 
    count_element=key[:56] 
    #print "%s => %s" % (key[:56], value) #value[:56] 

    for i in range(length_dic): 
     i+=1 
     if count_element == key[:56]: 
      itr+=int(value) 
     print i 
    length_dic=length_dic-1 

Irgendwelche Hinweise?

Antwort

0

Dies ist genau das, was die Counter Objekt (in Version 2.7+) für sich:

import collections 
c = collections.Counter() 

for key, value in count_db.iteritems(): 
    c[key[:56]] += value 
+0

ValueError: zu viele Werte zu entpacken, wenn ich es drucken möchte – badc0re

4

wäre eine triviale Ansatz sein:

result = {} 
for key, value in count_db.iteritems(): 
    result[key[:56]] = result.get(key[:56], 0) + value 

Sie auch gleich mit reduce erreichen könnte, wenn man es auf eine Zeile erhalten möchten:

import collections 
result = reduce(lambda x,y: x[y[0][:56]] += y[1] , count_db.iteritems(), collections.defaultdict(int)) 
+0

Man tnx viel, es sieht aus wie ich mehr lernen müssen : D – badc0re

+0

@DameJovanoski Jedes Mal, wenn Sie ein Dict oder eine Liste konvertieren oder transformieren müssen, gibt es normalerweise eine Ein-Zeilen-Lösung, auch wenn sie nicht hübsch aussieht;) – mensi

+0

Wenn ich versuche, die Liste zu drucken, bekomme ich ValueError: zu viele Werte zum Entpacken Hinweise? – badc0re

1

Ihr Wörterbuch als

>>> spam={"6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:AAAA": 2, 
"6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:BBBB": 2, 
"6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:CCCC": 1, 
"1caa60ebf9459d9cd406f1a03e1719b675dcfaad78292edc7e4a56be:DDDD": 1 
} 
Gegeben

können Sie etwas wie die folgenden

tun
>>> bacon=collections.defaultdict(int) 
>>> for k,v in [(k[:56],v) for k,v in spam.iteritems()]: 
    bacon[k]+=v 


>>> bacon 
defaultdict(<type 'int'>, {'6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002': 5, '1caa60ebf9459d9cd406f1a03e1719b675dcfaad78292edc7e4a56be': 1}) 
>>> 
0

Ich habe nicht verstanden, warum Sie all das in Ihrem Code getan haben. Ich denke, das würde die Arbeit machen:

tmp_dict = {} 
for key, value in count_db.iteritems(): 
    count_element=key[:56] 

    if count_element in tmp_dict: 
     tmp_dict[count_element] += value 
    else: 
     tmp_dict[count_element] = value 
Verwandte Themen