В данном словаре defaultdict(dict) тип данных:
Скажи, что это dict1
{726: {'X': [3.5, 3.5, 2.0], 'Y': [2.0, 0.0, 0.0], 'chr': [2, 2, 2]}, 128: {'X': [0.5, 4.0, 4.0], 'Y': [4.0, 3.5, 3.5], 'chr': [3, 3, 3]}}
dict2
is
{726: {'sum_X': [8, 0, 2], 'sum_Y': [3, 2, 0]}, 128: {'sum_X': [0.5, 2, 0], 'sum_Y': [5, 3.5, 3]}}
Ожидаемый результат:
Union_dict =
{726: {'X': [3.5, 3.5, 2.0], 'Y': [2.0, 0.0, 0.0], 'chr': [2, 2, 2], 'sum_X': [8, 0, 2], 'sum_Y': [3, 2, 0]}, 128: {'X': [0.5, 4.0, 4.0], 'Y': [4.0, 3.5, 3.5], 'chr': [3, 3, 3], 'sum_X': [0.5, 2, 0], 'sum_Y': [5, 3.5, 3]}}
Каждый словарь имеет unique key
(т.е. 726, 128...) и встречается в обоих словарях (dict1 and dict2
), но каждый ключ в разных словарях имеет unique identifier
с list values
. Я хочу объединить эти словари, используя уникальные ключи, но также хочу сохранить порядок значений внутри списка нетронутым и упорядоченным.
Я пробовал несколько методов, включая расширенный метод в Как объединить два словаря в одно выражение? объясняется Aaron Hall
. Я пытался изменить подходы, используя то, что я знаю о dict comprehension
, но это не помогло.
Я старался:
1
union_dict = {k: [dict1[i] for i in v] for k, v in dict2.items()}
2
union_dict = defaultdict(dict) for a,b in dict1.items(), dict2.items(): union_dict[dict1].append(dict2)
3
dicts = [dict1, dict2] union_dict = defaultdict(dict) for a,b in dicts: union_dict[k] = tuple(union_dict[k] for d in dicts)
Кроме того, не могли бы вы дать мне исчерпывающее объяснение нескольких способов сделать это и сохранить низкий объем памяти, поскольку мои словари будут довольно большими.
Спасибо большое !
[8, 0, 2}
, это опечатка? - person Elmex80s   schedule 14.03.2017[8, 0, 2]
. - person everestial007   schedule 14.03.2017unique identifier
, которые содержатlist values
в уникальномkeys
. Ключи одинаковы между двумя диктовками, но уникальный идентификатор - нет. Все, что я хочу, этоunion using the keys
не что иное, как сохранение порядка значений в списке. - person everestial007   schedule 14.03.2017update method
должен работать, но не работает, если только я этого не понимаю. - person everestial007   schedule 14.03.2017