Объединение записей, фильтрация словарей Python - PullRequest
0 голосов
/ 20 мая 2010

У меня есть два больших списка, которые заполнены словарями. Мне нужно объединить записи, если значение из dict2 == dict1, и поместить новые объединенные совпадения в другое место. У меня проблемы с объяснением.

Список один содержит:

{'keyword':value, 'keyword2':value2}

Список два:

{'keyword2':value2, 'keyword3':value3}

Мне нужен новый список со словарями, включающими ключевое слово1, ключевое слово2 и ключевое слово3, если оба списка имеют одинаковое значение ключевого слова2 Какой лучший способ сделать это? Когда я пытаюсь, я только придумываю тонны вложенных в петли. Спасибо

Ответы [ 2 ]

2 голосов
/ 20 мая 2010

Если вас не волнуют «конфликты», т. Е. Один и тот же ключ отображается на разные значения в двух диктах, вы можете использовать метод диктов update:

>>> d1 = {'keyword': 1, 'keyword2': 2}
>>> d2 = {'keyword2': 2, 'keyword3': 3}
>>> d = {}
>>> d.update(d1)
>>> d
{'keyword2': 2, 'keyword': 1}
>>> d.update(d2)
>>> d
{'keyword3': 7, 'keyword2': 2, 'keyword': 1}

Предполагая, что ваши диктанты хранятся в большом списке с именем dict_list:

total = {}
for d in dict_list:
    total.update(d)
0 голосов
/ 20 мая 2010

Цикл по одному словарю, сравнивая отдельные элементы с другим словарем. Например, где dict1 и dict2 - оригиналы, а dict3 - результат:

dict3 = dict1
for k in dict2:
    if k in dict1:
        # The key is in both dictionaries; we've already added dict1's version
        if dict1[k] != dict2[k]:
            pass # The dictionaries have different values; handle this as you like
    else
        # The key is only in dict2; add it to dict3
        dict3[k] = dict2[k]

Вам не ясно, какое поведение вы хотите, если два словаря имеют разные значения для некоторого ключа; замените «пропуск» тем, что вы хотите сделать. (Как написано, оно будет сохранять значение от dict1. Если вы не хотите включать какое-либо значение, замените pass на del dict3[k].)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...