[英]How to I compare two dictionary value lists, and update list value if another list value has changed in Python3?
[英]Python3 - Compare two lists of dictonaries and update value
我有兩個列表(這些列表將有數百條記錄),但這里是示例:
list1 = [
{'VENDOR': 'VENDOR1', 'VLAN': '500', 'OUI': []},
{'VENDOR': 'VENDOR2', 'VLAN': '600', 'OUI': []},
{'VENDOR': 'VENDOR3', 'VLAN': '700', 'OUI': []},
]
list2 = [
{'VLAN': '500', 'OUI': '0001FC'},
{'VLAN': '600', 'OUI': '00D024'},
{'VLAN': '500', 'OUI': '00D024'},
{'VLAN': '700', 'OUI': '00D024'},
{'VLAN': '700', 'OUI': '023456'},
]
我想從 list2 中取出兩個列表之間 VLAN 匹配的每個 OUI,然后將其添加到 list1 中 OUI 鍵的值中。 (我想這可能需要第三個字典來保存所有內容)。
最終結果將是這樣的:
list3 = [
{'VENDOR': 'VENDOR1', 'VLAN': '500', 'OUI': ["0001FC", "00D024"]},
{'VENDOR': 'VENDOR2', 'VLAN': '600', 'OUI': ["00D024"]},
{'VENDOR': 'VENDOR3', 'VLAN': '700', 'OUI': ["00D024", "023456"]}
]
我什至不確定從哪里開始,因此不勝感激。
這是一種方法,關於
(我想這可能需要第三個字典來保存所有內容)
那沒必要
list1 = [
{'VENDOR': 'VENDOR1', 'VLAN': '500', 'OUI': []},
{'VENDOR': 'VENDOR2', 'VLAN': '600', 'OUI': []},
{'VENDOR': 'VENDOR3', 'VLAN': '700', 'OUI': []},
]
list2 = [
{'VLAN': '500', 'OUI': '0001FC'},
{'VLAN': '600', 'OUI': '00D024'},
{'VLAN': '500', 'OUI': '00D024'},
{'VLAN': '700', 'OUI': '00D024'},
{'VLAN': '700', 'OUI': '023456'},
]
# to hold indexes of VLAN in list1 so it will be easy to
# append to the right "OUI" list inside list1
indexes = {}
# get the index of each VLAN
for i in range(len(list1)):
indexes[list1[i]["VLAN"]] = i
# `indexes` now => {"500": 0, "600": 1, "700": 2}
for a in list2:
# now it's easy to target the right `"OUI"` list
# for example the first iteration
# list1[0]["OUI"].append("0001FC")
list1[indexes[a["VLAN"]]]["OUI"].append(a["OUI"])
print(list1)
Output:
[
{'VENDOR': 'VENDOR1', 'VLAN': '500', 'OUI': ['0001FC', '00D024']},
{'VENDOR': 'VENDOR2', 'VLAN': '600', 'OUI': ['00D024']},
{'VENDOR': 'VENDOR3', 'VLAN': '700', 'OUI': ['00D024', '023456']}
]
您需要執行該操作的代碼在這里:
for i in range(0,len(list1)):
for j in range(0,len(list2)):
if(list1[i]["VLAN"] == list2[j]["VLAN"]):
list1[i]["OUI"].append(list2[j]["OUI"])
並測試您是否得到正確的輸出,您可以使用以下代碼:
for i in range(0,len(list1)):
print(list1[i]["OUI"])
我相信這段代碼是不言自明的,但如果你想解釋為什么會這樣,請隨時提問。
我會將list1
重組為嵌套字典,其中VLAN
是鍵,然后迭代list2
並將VLAN
項添加到嵌套字典中的OUI
列表中。 然后我們可以打印嵌套字典的values()
。
list1 = [
{"VENDOR": "VENDOR1", "VLAN": "500", "OUI": []},
{"VENDOR": "VENDOR2", "VLAN": "600", "OUI": []},
{"VENDOR": "VENDOR3", "VLAN": "700", "OUI": []},
]
list2 = [
{"VLAN": "500", "OUI": "0001FC"},
{"VLAN": "600", "OUI": "00D024"},
{"VLAN": "500", "OUI": "00D024"},
{"VLAN": "700", "OUI": "00D024"},
{"VLAN": "700", "OUI": "023456"},
]
vendors = {v["VLAN"]: v for v in list1}
# {'500': {'VENDOR': 'VENDOR1', 'VLAN': '500', 'OUI': []}, '600': {'VENDOR': 'VENDOR2', 'VLAN': '600', 'OUI': []}, '700': {'VENDOR': 'VENDOR3', 'VLAN': '700', 'OUI': []}}
for vlan in list2:
vendors[vlan["VLAN"]]["OUI"].append(vlan["OUI"])
print(list(vendors.values()))
Output:
[{'VENDOR': 'VENDOR1', 'VLAN': '500', 'OUI': ['0001FC', '00D024']}, {'VENDOR': 'VENDOR2', 'VLAN': '600', 'OUI': ['00D024']}, {'VENDOR': 'VENDOR3', 'VLAN': '700', 'OUI': ['00D024', '023456']}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.