我有一個包含 CamelCase 敏感值的字典,我想根據小寫元素串列過濾字典值:
d = {'1a': ['DW_TEST (DEV)', 'public', 'Labs'],
'1b': ['DW_TEST (DEV)', 'public', 'Test'],
'1c': ['DW_TEST (PROD)', 'public', 'Labs'],
'1d': ['DW_TEST (PROD)', 'public', 'Test'],
'2a': ['DW_PROD (PROD)', 'public', 'Medications'],
'2b': ['DW_PROD (DEV)', 'public', 'Med_Test']}
l = [['dw_test (dev)', 'public', 'labs'],
['dw_test (prod)', 'public', 'labs'],
['dw_prod (prod)', 'public', 'medications']]
預期字典:
d = {'1a': ['DW_TEST (DEV)', 'public', 'Labs'],
'1c': ['DW_TEST (PROD)', 'public', 'Labs'],
'2a': ['DW_PROD (PROD)', 'public', 'Medications']}
我知道如何根據字典鍵進行過濾,但我想根據串列過濾字典值。
uj5u.com熱心網友回復:
一種方法是將 l 轉換為一組元組(查找),然后過濾掉集合中不存在值的那些項:
lookup = set(tuple(li) for li in l)
result = {key: value for key, value in d.items() if tuple(map(str.lower, value)) in lookup}
print(result)
輸出
{'1a': ['DW_TEST (DEV)', 'public', 'Labs'], '1c': ['DW_TEST (PROD)', 'public', 'Labs'], '2a': ['DW_PROD (PROD)', 'public', 'Medications']}
uj5u.com熱心網友回復:
您可以通過像這樣傳遞字串比較來做到這一點:
l = [str(i) for i in l]
new_dict = {key:value for (key,value) in d.items() if str(value).lower() in l}
uj5u.com熱心網友回復:
d = {'1a': ['DW_TEST (DEV)', 'public', 'Labs'],
'1b': ['DW_TEST (DEV)', 'public', 'Test'],
'1c': ['DW_TEST (PROD)', 'public', 'Labs'],
'1d': ['DW_TEST (PROD)', 'public', 'Test'],
'2a': ['DW_PROD (PROD)', 'public', 'Medications'],
'2b': ['DW_PROD (DEV)', 'public', 'Med_Test']}
l = [['dw_test (dev)', 'public', 'labs'],
['dw_test (prod)', 'public', 'labs'],
['dw_test (prod)', 'public', 'medications']]
d_l = { k:[ii.lower() for ii in i] for k,i in d.items() }
l_l = [[ii.lower() for ii in i] for i in l]
o = {}
for key, value in d_l.items():
for item in l_l:
if item == value:
o[key] = d[key]
print(o)
這應該有效,將兩個串列/字典轉換為小寫,比較然后從原始串列中附加
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/334496.html
