Как поместить 2 словаря в один словарь в качестве элементов? - PullRequest
0 голосов
/ 10 марта 2020

Я хочу поместить 2 словаря в один словарь. нота. Я не собираюсь объединять их или присоединяться к ним. Я ищу метод, аналогичный дополнению для словаря. Запись; Я хочу, чтобы они держали свои структуры. не хочу, чтобы данные перемешивались

Пример У меня есть это,

dic1 = {'Apple':'Mac', 'Microsoft': 'Surface', 'Google': 'Chromebook', 'Lenovo':'ThinkPad'}
dic2 = {1:'Apple', 2:'Amazon', 3:'Microsoft', 4:'Google', 5:'Facebook'}

Я хочу это

dic3 = {{'Apple':'Mac', 'Microsoft': 'Surface', 'Google': 'Chromebook', 'Lenovo':'ThinkPad'},
{1:'Apple', 2:'Amazon', 3:'Microsoft', 4:'Google', 5:'Facebook'}}

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Словари работают не так. У вас может быть список или кортеж (или, возможно, frozenset), который в основном выглядит так, как вы хотите, но словари не допускают такого рода линейную конкатенацию. Они являются строго ассоциативными контейнерами, что означает, что каждое значение должно иметь связанный ключ.

Однако если вы можете связать каждый словарь с ключом, то то, что вы хотите, становится чрезвычайно простым:

dic3 = {
    'dic1': {'Apple':'Mac', 'Microsoft': 'Surface', 'Google': 'Chromebook', 'Lenovo':'ThinkPad'},
    'dic2': {1:'Apple', 2:'Amazon', 3:'Microsoft', 4:'Google', 5:'Facebook'}
}

Или, используя ваши переменные:

dic3 = {'dic1': dic1, 'dic2': dic2}
0 голосов
/ 10 марта 2020

Обновление: проверьте добавленный пример внизу.

Если вы не хотите менять dic1 или dic2, вы можете сделать это:

dic3 = {**dic1, **dic2}

dic3 будет словарь.

Любой общий ключ будет иметь значение, появляющееся позже (справа).

Для ожидаемого типа вывода (набора словарей) вам необходимо создать хешируемый словарь следующим образом:

class hashabledict(dict):
    def __hash__(self):
        return hash(tuple(sorted(self.items())))

dic1 = {'Apple':'Mac', 'Microsoft': 'Surface', 'Google': 'Chromebook', 'Lenovo':'ThinkPad'}
dic2 = {1:'Apple', 2:'Amazon', 3:'Microsoft', 4:'Google', 5:'Facebook'}
dic3 = {hashabledict(dic1), hashabledict(dic2)}

Вышеприведенное определение класса hashabledict взято отсюда: Python hashable dicts

...