如何从多个列表打印到一个API请求

tvmytwxo  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(2)|浏览(162)

我有三份清单:

servers = ['DC1','DC2','DC3']
main_process = ['1.exe','2.exe','3.exe']
sub_process = ['s1','s2','s3']

我在json中有一个API请求,我需要打印到一个文件中的次数与列表中的元素数量一样多--在本例中是3次--但每个列表中的元素位于相同的位置。

例如:

POST api/alerting/rule
{
  "params":{
      "aggType":"avg",
      "termSize":6,
      "thresholdComparator":">",
      "timeWindowSize":5,
      "timeWindowUnit":"m",
      "groupBy":"top",
      "threshold":[
         1000
      ],
      "index":[
         ".test-index"
      ],
      "timeField":"@timestamp",
      "aggField":"sheet.version",
      "SERVER":"DC1" # <--------- This Parameter
      "MAIN_PROCESS":"1.exe" # <--------- This Parameter
      "SUB_PROCESS":"s1" # <--------- This Parameter
   },
   "consumer":"alerts",
   "rule_type_id":".index-threshold",
   "schedule":{
      "interval":"1m" }
   "notify_when":"onActionGroupChange",
   "name":"my alert"
}

POST api/alerting/rule
{
  "params":{
      "aggType":"avg",
      "termSize":6,
      "thresholdComparator":">",
      "timeWindowSize":5,
      "timeWindowUnit":"m",
      "groupBy":"top",
      "threshold":[
         1000
      ],
      "index":[
         ".test-index"
      ],
      "timeField":"@timestamp",
      "aggField":"sheet.version",
      "SERVER":"DC2" # <--------- This Parameter
      "MAIN_PROCESS":"2.exe" # <--------- This Parameter
      "SUB_PROCESS":"s2" # <--------- This Parameter
   },
   "consumer":"alerts",
   "rule_type_id":".index-threshold",
   "schedule":{
      "interval":"1m" }
   "notify_when":"onActionGroupChange",
   "name":"my alert"
}

POST api/alerting/rule
{
  "params":{
      "aggType":"avg",
      "termSize":6,
      "thresholdComparator":">",
      "timeWindowSize":5,
      "timeWindowUnit":"m",
      "groupBy":"top",
      "threshold":[
         1000
      ],
      "index":[
         ".test-index"
      ],
      "timeField":"@timestamp",
      "aggField":"sheet.version",
      "SERVER":"DC3" # <--------- This Parameter
      "MAIN_PROCESS":"3.exe" # <--------- This Parameter
      "SUB_PROCESS":"s3" # <--------- This Parameter
   },
   "consumer":"alerts",
   "rule_type_id":".index-threshold",
   "schedule":{
      "interval":"1m" }
   "notify_when":"onActionGroupChange",
   "name":"my alert"
}

我知道我需要一些循环,但我还不能解决这个问题。我更喜欢在bash中这样做,因为我在这里工作的环境也是一个很好的解决方案。

谢谢。

klr1opcd

klr1opcd1#

您可以执行一个for循环,然后在所有三个列表中使用相同的索引访问值。

servers = ['DC1','DC2','DC3']
main_process = ['1.exe','2.exe','3.exe']
sub_process = ['s1','s2','s3']

if not (len(servers) == len(main_process) == len(sub_process)):
    raise Exception("The lists have not the same length")

for i in range(len(servers)):
    data = {
        "params":{
            ...,
            "SERVER": servers[i]
            "MAIN_PROCESS": main_process[i]
            "SUB_PROCESS": sub_process[i]
        },
        ...
    }

如果您不想验证列表的长度,也可以循环到最小长度:

for i in range(min(len(servers), len(main_process), len(sub_process)))
ccrfmcuu

ccrfmcuu2#

将这3个列表合并成一个词典列表可能会更容易,如果这些列表都有相同的长度

data = [{'server': servers, 'main_process': main_process, 'sub_process': sub_process} for servers, main_process, sub_process in zip(servers, main_process, sub_process)]

结果:

[{'server': 'DC1', 'main_process': '1.exe', 'sub_process': 's1'}, {'server': 'DC2', 'main_process': '2.exe', 'sub_process': 's2'}, {'server': 'DC3', 'main_process': '3.exe', 'sub_process': 's3'}]

然后,您可以像这样在元素上循环:

for item in data:
    print(item.get("server"), item.get("main_process"), item.get("sub_process"))

不推荐使用,但您也可以使用索引同步循环这3个列表:

for i, server in enumerate(servers):
    print(server, main_process[i], sub_process[i])

结果:

DC1 1.exe s1
DC2 2.exe s2
DC3 3.exe s3

但使用字典键可以使代码更加明确。

相关问题