Сравните значения списка словаря со списком значений списка, используя python - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть словарь значений и список значений списка. Мне нужно сравнить значения списка со значениями словаря и получить сопоставленные данные с парами ключ и значение.

Мой словарь:

res = {
    'cXboTHyIeZaof6x7': ['#de6262', '#ffb88c'],
    '19hyHnlzDMEDJ9N5': ['#ffcc66', '#FFFFFF'],
    'TByXB1YzYSJW2kXO': ['#7A7FBC', '#807CC4'],
    'utTtWdchE2T6vUF5': ['#A3DAC3', '#8BD0D4']
}

Мой список значений списка:

diff_tolistoflist = [
    ['#de6262', '#ffb88c'],
    ['#A3DAC3', '#8BD0D4']
]

Ожидаемый результат:

test = {
    'cXboTHyIeZaof6x7': ['#de6262', '#ffb88c'],
    'utTtWdchE2T6vUF5': ['#A3DAC3', '#8BD0D4']
}

Мне нужно сравнить значения dict и список значений, чтобы получить аналогичные данные с парой ключ-значение.

Ответы [ 4 ]

2 голосов
/ 04 ноября 2019

Вы можете использовать словарь, который довольно легко прочитать:

d = {k:v for k,v in res.items() if v in diff_tolistoflist}
print(d)  
# {'cXboTHyIeZaof6x7': ['#de6262', '#ffb88c'], 'utTtWdchE2T6vUF5': ['#A3DAC3', '#8BD0D4']}
0 голосов
/ 04 ноября 2019

Попробуйте, у меня есть пользовательская функция фильтра.

print dict(filter(lambda x:x[1] in diff_tolistoflist,res.items()))

Result:{'cXboTHyIeZaof6x7': ['#de6262', '#ffb88c'], 'utTtWdchE2T6vUF5': ['#A3DAC3', '#8BD0D4']}
0 голосов
/ 04 ноября 2019

Если значения уникальны, мы можем инвертировать наш словарь:

reversed_dict = {tuple(res[key]): key for key in res}

Ключи в словаре должны быть изменяемыми, поэтому нам пришлось преобразовать их в кортежи.

Затем мыможет выполнить простой поиск значений:

final_result = {}
for v in diff_tolistoflist:
    k = reversed_dict.get(tuple(v))
    if k:
        final_result[k] = v

Я использовал dict.get, чтобы он не выдавал исключение, если что-то не так.

>>> final_result
{'cXboTHyIeZaof6x7': ['#de6262', '#ffb88c'], 'utTtWdchE2T6vUF5': ['#A3DAC3', '#8BD0D4']}

В этом решении учитывается регистр. Это означает, что f и F считаются разными. Чтобы сделать его нечувствительным к регистру, вы можете преобразовать строку в более низкую при обращении к словарю, а затем сделать то же самое с diff_tolistoflist (при его объявлении или при поиске значений в цикле).

0 голосов
/ 04 ноября 2019

Вы можете проверить элемент списка с помощью dict val_list

test = {}
for key, val in res.items():
    if val in diff_tolistoflist:
        test[key] = val

Результат

>>> test
>>> {'cXboTHyIeZaof6x7': ['#de6262', '#ffb88c'], 'utTtWdchE2T6vUF5': ['#A3DAC3', '#8BD0D4']}
...