2013-05-02 4 views
-1

у меня есть два счетчика со мной, так что давайте предположим для простоты:Как я могу объединить два счетчика (пользовательские)

a = "this" : 2 , "is" : 3 
b = "what" : 3 , "is" : 2 

Теперь я хочу, чтобы объединить два счетчика, как это:

concatenatedCounter = "this" : 2 , "is" : 3,2 , "what" : 3 

Есть ли способ сделать это в Python?

Edit 1: решаемые первый выпуск, ниже новый вопрос, пожалуйста, помогите :)

В приведенном выше результат, если я хочу defaultdict содержать { «это»: [2,0], 'является ': [3,2],' what ': [0,3]}), какие изменения мне нужно будет сделать?

+1

что делает это есть делать с прилавком? Вы добавляете 2 и 3 или пытаетесь просто конкатенировать строку? – Cfreak

ответ

3

использование collections.defaultdict:

In [38]: a = {"this" : 2 , "is" : 3} 

In [39]: b = {"what" : 3 , "is" : 2} 

In [40]: from collections import defaultdict 

In [41]: collected_counter=defaultdict(list) 

In [42]: for key,val in a.items(): 
    collected_counter[key].append(val) 
    ....:  

In [43]: for key,val in b.items(): 
    collected_counter[key].append(val) 
    ....:  

In [44]: collected_counter 
Out[44]: defaultdict(<type 'list'>, {'this': [2], 'is': [3, 2], 'what': [3]}) 

Update:

>>> keys=a.viewkeys() | b.viewkeys() 
>>> collected_counter=defaultdict(list) 
>>> for key in keys: 
    collected_counter[key].append(a.get(key,0)) 
...      
>>> for key in keys: 
    collected_counter[key].append(b.get(key,0)) 
...      
>>> collected_counter 
defaultdict(<type 'list'>, {'this': [2, 0], 'is': [3, 2], 'what': [0, 3]}) 
+0

Удивительный! Благодарю. – user1795516

+0

В приведенном выше результате, если я хочу, чтобы defaultdict содержал {'this': [2,0], 'is': [3,2], 'what': [0,3]}), какие изменения мне нужны делать? – user1795516

+0

@ user1795516 см. Мое обновленное решение. –

1

Использование defaultdict

from collections import defaultdict 
combinedValues = defaultdict(list) 
for key in counterA.viewkeys() & counterB.viewkeys(): 
    combinedValues[key].extend([counterA[key], counterB[key]]) 
+0

В приведенном выше результате, если я хочу, чтобы defaultdict содержал {'this': [2,0], 'is': [3,2], 'what': [0,3]}), какие изменения мне нужны делать? – user1795516

+0

@ user1795516: См. Edit. –

2
>>> from collections import defaultdict 
>>> from itertools import chain 
>>> dd = defaultdict(list) 
>>> a = {"this" : 2 , "is" : 3} 
>>> b = {"what" : 3 , "is" : 2} 
>>> for k, v in chain(a.items(), b.items()): 
     dd[k].append(v) 


>>> dd 
defaultdict(<type 'list'>, {'this': [2], 'is': [3, 2], 'what': [3]}) 
+0

Ницца! просто то, что мне нужно! – user1795516

+0

В приведенном выше результате, если я хочу, чтобы defaultdict содержал {'this': [2,0], 'is': [3,2], 'what': [0,3]}), какие изменения мне нужны делать? – user1795516

Смежные вопросы