2015-12-22 3 views
3

У меня есть две коллекции Counter C1 и C2, они имеют схожие данные, но разные значения (подумайте C1 и C2 как количество яблок и апельсинов, которые есть у группы людей).Как объединить два или более счетчика в один словарь?

Я хочу объединить эти две коллекций в одну Словаря, который выглядит как

{ 
Person1: [1, 2], 
Person2: [5, 1], 
... 
} 

Я еще не решил, что структура данных для хранения слитых отсчетов (возможно, список), чтобы легко записать их в файл CSV файл с # яблок и апельсинов, являющихся отдельными столбцами. Есть много трюков, о которых я не знаю в коллекциях python, я ищу минимальный размер кода. Благодарю.

EDIT: Из приведенных ниже ответов, я чувствовал, что мой вопрос не ясно, как я думал, что, позвольте мне уточнить, что именно то, что я ищу: Дайте мне две коллекции Счетчик c1 и c2:

c1 = [ 
    ('orange', 10), 
    ('apple', 20) 
] 

c2 = [ 
    ('orange', 15), 
    ('apple', 30) 
] 

Я хочу объединить эти две коллекции в одну Словаре таким образом, что она выглядит как:

merged = { 
    'orange': [10, 15], 
    'apple': [20, 30] 
} 

Или другая структура данных, которые могут быть легко преобразованы и вывод в формате CSV.

+0

Есть ли у них одинаковые ключи? –

+0

@LevLevitsky Да, гарантировано. –

ответ

1

Вы можете использовать defaultdict() из collections модуля для сохранения объединенного результата, то вы используете chain() из itertools модуля. Что делает chain, так это то, что он делает итератор, который возвращает элементы из каждого вашего «счетчика» и позволяет избежать записи вложенного цикла.

>>> from collections import defaultdict 
>>> from itertools import chain 
>>> c1 = [ 
... ('orange', 10), 
... ('apple', 20) 
... ] 
>>> c2 = [ 
... ('orange', 15), 
... ('apple', 30) 
... ] 
>>> merged = defaultdict(list) 
>>> for item in chain(c1, c2): 
...  merged[item[0]].append(item[1]) 
... 
>>> merged 
defaultdict(<class 'list'>, {'apple': [20, 30], 'orange': [10, 15]}) 
>>> 
1

Использование панды:

import pandas as pd 
from collections import Counter 

c1 = Counter('jdahfajksdasdhflajkdhflajh') 
c2 = Counter('jahdflkjhdazzfldjhfadkhfs') 


df = pd.DataFrame({'apples': c1, 'oranges': c2}) 
df.to_csv('apples_and_oranges.csv') 

Это работает также, если ключи счетчиков не все равно. Там будет NaN, где ключ появился только в другом счетчике.

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