我有一個這樣的輸入字典:
dict1= {'AM': ['tv', 'rs', 'pq', 'MN', 'tN', 'tq', 'OP', 'tP', 'QR', 'tr'],
'BR': ['tv', 'rs', 'pq', 'MN', 'tN', 'tq', 'OP', 'tP', 'QR', 'tr']}
我要在其中搜索的另外兩個字典
dict2={'AM':{'pq','rs','tv'},'BR':{'MN','OP','QR'}}
dict3={'AM':{'tq','rs','tv'},'BR':{'tN','tP','tr'}}
預期產出
{'AM-tv': 1,
'AM-rs': 1,
'AM-pq': 1,
'AM-MN': 0,
'AM-tN': 0,
'AM-tq': 1,
'AM-OP': 0,
'AM-tP': 0,
'AM-QR': 0,
'AM-tr': 0,
'BR-tv': 0,
'BR-rs': 0,
'BR-pq': 0,
'BR-MN': 1,
'BR-tN': 1,
'BR-tq': 0,
'BR-OP': 1,
'BR-tP': 1,
'BR-QR': 1,
'BR-tr': 1}
在輸出中,需要從 dict1 生成對。如果 dict1 鍵的值存在于 dict2 或 dict3 鍵的值中,則其值在輸出中將為 1。如果值不存在,則其值在新字典中將為 0。有什么辦法嗎?
uj5u.com熱心網友回復:
dict1一種選擇是在我們遍歷時對串列中的每個元素進行集合成員資格檢查dict1:
out = {}
for k, lst in dict1.items():
s = dict2[k] | dict3[k]
for v in lst:
out[f"{k}-{v}"] = (v in s) * 1
我們也可以撰寫與dict理解相同的代碼(但它比其他選項慢,因為我們確實設定了聯合len(lst)時間而不是回圈中的一次):
out = {f"{k}-{v}": (v in dict2[k] | dict3[k]) * 1 for k, lst in dict1.items() for v in lst}
輸出:
{'AM-tv': 1,
'AM-rs': 1,
'AM-pq': 1,
'AM-MN': 0,
'AM-tN': 0,
'AM-tq': 1,
'AM-OP': 0,
'AM-tP': 0,
'AM-QR': 0,
'AM-tr': 0,
'BR-tv': 0,
'BR-rs': 0,
'BR-pq': 0,
'BR-MN': 1,
'BR-tN': 1,
'BR-tq': 0,
'BR-OP': 1,
'BR-tP': 1,
'BR-QR': 1,
'BR-tr': 1}
uj5u.com熱心網友回復:
為此,您可以使用兩個簡單的嵌套回圈。
這是一個適用于大多數 python 版本的變體:
out = {}
dicts = [dict2, dict3]
for k,l in dict1.items():
for v in l:
out[f'{k}-{v}'] = 1 if any(v in d[k] for d in dicts) else 0
或者,作為字典理解:
out = {f'{k}-{v}': 1 if any(v in d[k] for d in dicts) else 0
for k,l in dict1.items() for v in l}
輸出:
{'AM-tv': 1,
'AM-rs': 1,
'AM-pq': 1,
'AM-MN': 0,
'AM-tN': 0,
'AM-tq': 1,
'AM-OP': 0,
'AM-tP': 0,
'AM-QR': 0,
'AM-tr': 0,
'BR-tv': 0,
'BR-rs': 0,
'BR-pq': 0,
'BR-MN': 1,
'BR-tN': 1,
'BR-tq': 0,
'BR-OP': 1,
'BR-tP': 1,
'BR-QR': 1,
'BR-tr': 1}
uj5u.com熱心網友回復:
您可以通過首先創建一組存在于每個鍵中的所有值,然后檢查所有鍵和值的組合dict2是否存在于該集合中,從而獲得所需的結果:dict3dict1
present = { k : dict2[k] | dict3[k] for k in dict2 }
result = { f'{k}-{v}' : (v in present[k]) * 1 for k in dict1.keys() for v in dict1[k] }
輸出:
{
'AM-tv': 1, 'AM-rs': 1, 'AM-pq': 1, 'AM-MN': 0, 'AM-tN': 0,
'AM-tq': 1, 'AM-OP': 0, 'AM-tP': 0, 'AM-QR': 0, 'AM-tr': 0,
'BR-tv': 0, 'BR-rs': 0, 'BR-pq': 0, 'BR-MN': 1, 'BR-tN': 1,
'BR-tq': 0, 'BR-OP': 1, 'BR-tP': 1, 'BR-QR': 1, 'BR-tr': 1
}
注意 - 將布林值乘以1與使用將其轉換為 int 相同int(...),但速度更快。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/465279.html
標籤:Python python-3.x 列表 字典 元组
上一篇:我在ArrayAdapter上收到錯誤,說該函式不存在
下一篇:合并對特定鍵具有相同值的字典
