簡體   English   中英

使用 python 將字典列表值與列表值列表進行比較

[英]Compare dictionary list values to the list of list values using python

我有一個字典值和列表值列表。 我需要將列表值與字典值進行比較,並使用鍵值對獲取匹配的數據。

我的字典:

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

我的列表值列表:

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

預期 output:

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

我需要比較 dict 值和值列表以獲取具有鍵值對的相似數據。

您可以使用非常容易閱讀的字典理解:

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

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

如果值是唯一的,我們可以反轉我們的字典:

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執行相同操作(在聲明它或在循環中查找值時)。

試試這個,我有用戶過濾器 function。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM