Как объединить два значения в один ключ для словаря в python? - PullRequest
0 голосов
/ 15 февраля 2020

Итак, у меня есть словарь в следующем формате. Ключ представляет собой сцепленную строку, а значение представляет собой список кортежей.

dictionary = {'ABC|1':[(1,10),(5,16),(15,30)],
              'ABC|2':[(9,18),(78,10),(5,10)],
              'XYZ|1':[(45,56),(72,79),(81,98),(100,120)],
              'XYZ|2':[(11,26),(78,99),(105,119),(150,178)],..........}

Теперь я хочу изменить ключ с 'ABC | 1' на 'AB C' и объединить два значения 'ABC | 1' и 'ABC | 2' в одно значение для ключа 'AB C'. Таким образом, final_dict должен выглядеть следующим образом:

final_dict = {'ABC':[(1,10),(5,16),(15,30),(9,18),(78,10),(5,10)],
              'XYZ':[(45,56),(72,79),(81,98),(100,120),(11,26),(78,99),(105,119),(150,178)],....}

Подход, который я пробую, заключается в следующем:

final_dict = dict()
for key in dictionary.keys():
  new_key = key.split('|')[0]
  if new_key not in final_dict:
    value = list()
  if new_key in key:
    value.append(dictionary[key])

Однако это не работает. Кто-нибудь может дать мне предложение сделать это? Без использования pandas.

Ответы [ 3 ]

1 голос
/ 15 февраля 2020

это вариант:

from collections import defaultdict

dct = defaultdict(list)
for key, value in dictionary.items():
    new_key = key.split('|')[0]
    dct[new_key].extend(value)

где я использую collections.defaultdict.

ваше решение близко, но исходя из желаемого результата вы хотите list.extend а не list.append.

0 голосов
/ 15 февраля 2020

Вы должны построить свой final_dict, присвоив желаемому ключу правильное значение, потому что ваш исходный дикт имеет списки alea dry, в качестве значения вы должны расширить их значениями final_dict:

final_dict = dict()
for key in dictionary.keys():
    new_key = key.split('|')[0]
    if new_key not in final_dict:
        final_dict[new_key]= dictionary[key]
    else:
        final_dict[new_key].extend(dictionary[key])
0 голосов
/ 15 февраля 2020

Просто некоторые изменения в вашем коде:

dictionary = {'ABC|1':[(1,10),(5,16),(15,30)],
              'ABC|2':[(9,18),(78,10),(5,10)],
              'XYZ|1':[(45,56),(72,79),(81,98),(100,120)],
              'XYZ|2':[(11,26),(78,99),(105,119),(150,178)]}

final_dict = {}
for key in dictionary.keys():
    new_key = key.split('|')[0]
    if new_key not in final_dict:
        final_dict[new_key] = dictionary[key]
    else:
        final_dict[new_key].extend(dictionary[key])

Я попробовал приведенный выше код и выдает следующее:

{'XYZ': [(45, 56), (72, 79), (81, 98), (100, 120), (11, 26), (78, 99), (105, 119), (150, 178)], 'ABC': [(1, 10), (5, 16), (15,
 30), (9, 18), (78, 10), (5, 10)]}
...