問題陳述:
這就是我呼叫我的 prepare_payload.py 的方式,
python3 prepare_payload.py ['Test_B1','Test_B2','Test_B3'] [https://10.5.5.1,https://10.5.5.2,https://10.5.5.3] ['abc','efg','sss']
我正在嘗試準備的 json 有效負載:
{
"billing_account_number": "",
"vcenter_url": "",
"cred_header": "",
}
預期輸出:
{
"billing_account_number": "Test_B1",
"vcenter_url": "https://10.5.5.1",
"cred_header": "abc",
}
{
"billing_account_number": "Test_B2",
"vcenter_url": "https://10.5.5.2",
"cred_header": "efg",
}
{
"billing_account_number": "Test_B3",
"vcenter_url": "https://10.5.5.3",
"cred_header": "sss",
}
我的代碼:
import json
import os
import sys
master_list = []
billing_account_number = sys.argv[1]
ip_addr = sys.argv[2]
cred_header = sys.argv[3]
res = list(map(str, billing_account_number.strip('[]').split(',')))
ip = list(map(str, ip_addr.strip('[]').split(',')))
cred_headers = list(map(str, cred_header.strip('[]').split(',')))
master_list.append(res)
master_list.append(ip)
master_list.append(cred_headers)
def prepare_payload():
with open("rabbitmq_payload.json") as fh:
data = json.load(fh)
print('================================================')
return data
data = prepare_payload()
for i in master_list:
for j in i:
data['billing_account_number'] = j
data['vcenter_url'] = j
data['cred_header'] = j
print(data)
我無法確定是否必須將這些單獨的串列(例如 res、IP、cred_headers)合并到一個串列中,然后像主串列 [res[0],IP[0],cred_headers[0]] 一樣進行迭代,然后開始替換我的資料字典中的鍵值對?如果有任何我可以依賴的內置函式或任何有效的方法來解決這個問題,請幫助我。提前感謝所有出色的 Python 編碼人員!
uj5u.com熱心網友回復:
將串列作為命令列引數傳遞有點不方便。最好使用標準輸入,但盡管如此,請看一下這段代碼:
import sys
import ast
billing_account_number = ast.literal_eval(sys.argv[1])
ip_addr = ast.literal_eval(sys.argv[2])
cred_header = ast.literal_eval(sys.argv[3])
output = []
for i in range(len(billing_account_number)):
output.append({"billing_account_number": billing_account_number[i], "ip_addr": ip_addr[i], "cred_header": cred_header[i]})
print(output)
輸出:
[{'billing_account_number': 'Test_B1', 'ip_addr': 'https://10.5.5.1', 'cred_header': 'abc'}, {'billing_account_number': 'Test_B2', 'ip_addr': 'https://10.5.5.2', 'cred_header': 'efg'}, {'billing_account_number': 'Test_B3', 'ip_addr': 'https://10.5.5.3', 'cred_header': 'sss'}]
您需要將命令列引數用引號括起來,以便正確決議。此外,此代碼假定所有 3 個串列的長度相同。如果不能保證,那么您需要遍歷最長的串列并將缺失值設定為空字串。
uj5u.com熱心網友回復:
(似乎您在問不同的問題。如何更好地使用 argv 與如何合并串列不同。這是針對您文本中的問題。也很難說出您要對檔案做什么。)
您有 3 個串列中的內容要合并并轉換為字典。
合并串列的內置方法是 zip()
zip(res, ips, cred_headers)
有多種方法可以將其轉換為字典。一種是串列理解:
result = [{
"billing_account_number": res_item,
"ip_addr": ips_item,
"cred_header": cred_item,
} for res_item, ips_item, cred_item in zip(res, ips, cred_headers)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/346104.html
