2017-01-28 8 views
2

Я хочу объединить список в defaultdict, который имеет класс (ключи) и значения списка из двух разных данных/файлов. Я хочу объединить список, используя уникальный ключ, но сохраняя значения в списке отдельно.Как объединить список в `defaultdict` с помощью ключей, но сохранить список в этом ключе?

Вход:

defaultdict(<class 'list'>, {'1335': ['C', 'T', 'T', 'C', 'T', 'G'], '254': ['T', 'T', 'G', 'C', 'G', 'G']})

defaultdict(<class 'list'>, {'1335': ['A', 'C', 'A', 'A', 'C', 'A'], '254': ['A', 'G', 'A', 'T', 'A', 'A']})

выход:

defaultdict(<class 'list'>, {'1335': ['C', 'T', 'T', 'C', 'T', 'G'], ['A', 'C', 'A', 'A', 'C', 'A'] , '254': ['T', 'T', 'G', 'C', 'G', 'G'], ['A', 'G', 'A', 'T', 'A', 'A']})

Спасибо,

+0

Do оба dicts имеют точно такие же ключи? Если нет того, что в этом случае является желаемым результатом? – niemmi

+0

Да, большинство ключей будут такими же, но я думаю, что в других файлах данных могут быть экземпляры, в которых некоторые ключи будут уникальными для каждой информации. В этом случае я тоже хотел бы объединиться, но он будет иметь список только по одним данным. Спасибо, – everestial007

ответ

2

Вы хотите, чтобы значение нового словаря представляло собой список списков.

Вы можете создать новый defaultdict списков, и добавить значение списка из каждого словаря:

input_dicts = [dict1, dict2] 

result = defaultdict(list) 

for to_merge in input_dicts: 
    for key, value in to_merge: 
     result[key].append(value) 
+0

Я проверю это. Если у меня много словарей, вы думаете, что также возможно выполнить 'merged_dict = defaultdict (dict1, dict2)'? а затем запустите 'for-loop', например' for merged_dict: 'Спасибо – everestial007

+0

Нет, дублирующиеся ключи не разрешены, поэтому он сохранит самое последнее значение –

+0

Итак, ваше решение работает для 2 разных дефолтных дефолтов. Что делать, если я хочу сделать это с 3 или более 'defaultdict'. Мои фактические данные будут иметь несколько 'defaultdicts' – everestial007

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

  • Нет связанных вопросов^_^