下面是我的代碼:
mapping_dict = {"NET_D":
[
("name", "tiN"),
("d_id", "id"),
("m_ip", "ti_ip"),
("model", "cmbM"),
("dc", "cmbL"),
("vendor", "cmbV"),
("cab", "cmbC")
]
}
obj = {"ti_ip": "1.1.1.1", "cmbM": "model-a", "tiN": "device-123", "cmbV": "Systems", "cmbCt": "406", "cmbC": "sc", "id": "199"}
def process_results(item_list, mapping):
results = []
for i in item_list:
item = {}
for m in mapping:
try:
item[m[0]] = i[m[1]]
except KeyError:
item[m[0]] = ""
results.append(item)
return results, len(results)
process_results(obj, mapping_dict["NET_D"])
所需/想要的輸出:
{"m_ip": "1.1.1.1", "model": "model-a", "name": "device-123", "vendor": "Systems", "cab": "406", "dc": "sc", "d_id": "199"}
我得到的錯誤:
process_results
item[m[0]] = i[m[1]]
TypeError: string indices must be integers
任何人都可以提出正確的方法來實作所需/想要的輸出 我對python還是新手,為錯誤/錯誤道歉,或者我的代碼聽起來很傻/愚蠢;-)對你來說
uj5u.com熱心網友回復:
您可以這樣做,盡管從技術上講,您mapping_dict是元組串列而不是嵌套字典。
mapping_dict = {"NET_D":
[
("name", "tiN"),
("d_id", "id"),
("m_ip", "ti_ip"),
("model", "cmbM"),
("dc", "cmbL"),
("vendor", "cmbV"),
("cab", "cmbC")
]
}
obj = {"ti_ip": "1.1.1.1", "cmbM": "model-a", "tiN": "device-123", "cmbV": "Systems", "cmbCt": "406", "cmbC": "sc", "id": "199"}
def process_results(item_list, mapping):
return {i[0]:v for k,v in item_list.items() for i in mapping if k == i[1]}
這會給
{'m_ip': '1.1.1.1', 'model': 'model-a', 'name': 'device-123', 'vendor': 'Systems', 'cab': 'sc', 'd_id': '199'}```
這稱為字典理解并創建一個新字典。它基本上相當于
def process_results(item_list, mapping):
res = {}
for k,v in item_list.items():
for i in mapping:
if k == i[1]:
res[i[0]] = v
return res
迭代字典的每個值obj,然后遍歷mapping元組串列,如果該值與元組的 index[1] 相同,則在新字典中創建一個新的 key:value。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/437567.html
標籤:python-3.x 字典 映射
