Производительность оптимизировала изменение словаря - PullRequest
1 голос
/ 18 марта 2020

У меня есть список словарей, и у меня есть решение, описанное ниже:

[{"A1":"B1", "C1":"D1"},{"A2":"B2", "C2":"D2"},....]

Ожидаемый вывод будет словарь, подобный этому

{
"B1":"D1",
"B2":"D2",
...
}

Моя текущая процедура получить один словарь и создать 2 записи в единственном

ввод:

{"A1":"B1", "C1":"D1"}

вывод:

{"B1":"D1"}

где «A1» и «C1» находятся внутри моего настраиваемого метода:

def method(input_dictionary, default_key_from_dict, default_value_from_dict):
    single_dictionary[input_dictionary[default_key_from_dict]] =   input_dictionary[default_value_from_dict]

позже я выполняю следующие:

def function(dict_list):
    single_key_value_dictionary_list = list(map(convert_two_entries_dictionary_to_one_by_value, dict_list))
    global_dict = reduce(lambda a, b: dict(a, **b), single_key_value_dictionary_list)
    return global_dict

Я спрашиваю себя, есть ли какое-нибудь лучшее решение для этого у меня есть идея генератора, но я не уверен, стоит ли об этом думать? Любые замечания по этому поводу?

ОБНОВЛЕНИЕ В каждой записи списка в качестве словаря есть только 2 ключа. Только 2 ключа.

BR Питер

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Из комментариев, так как у вас всегда есть только 2 ключа. Вы можете использовать dict.update.

inp=[{"A1":"B1", "C1":"D1"},{"A2":"B2", "C2":"D2"}]
out={}
for d in inp:
    out.update((d.values(),))
out
# {'B1': 'D1', 'B2': 'D2'}
0 голосов
/ 18 марта 2020

Вы можете использовать что-то об этом:

dict1 = {"A1":"B1", "C1":"D1"}
it  = iter(dict1.values())
list1 = list(zip(it, it))
print(list1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...