使用python将字典列表值与列表值列表进行比较

时间:2019-11-04 10:35:54

标签: python list dictionary difference

我有一个字典值和一个列表值列表。我需要将列表值与字典值进行比较,并获得具有键和值对的匹配数据。

我的字典:

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 个答案:

答案 0 :(得分:2)

您可以使用非常容易阅读的字典理解:

d = {k:v for k,v in res.items() if v in diff_tolistoflist}
print(d)  
# {'cXboTHyIeZaof6x7': ['#de6262', '#ffb88c'], 'utTtWdchE2T6vUF5': ['#A3DAC3', '#8BD0D4']}

答案 1 :(得分:0)

您可以使用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']}

答案 2 :(得分:0)

如果值唯一,我们可以反转字典:

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']}

此解决方案区分大小写。这意味着fF被认为是不同的。为了使其不区分大小写,您可以在反转字典时将字符串转换为小写字母,以后再使用diff_tolistoflist进行相同操作(在声明字典或在循环中查找值时)。

答案 3 :(得分:0)

尝试一下,我有用户过滤功能。

x_test = [[age, sex, cp, trestbps]] # there could be multiple lists within the outer list if there were more than one samples