通过列表和检查条件解析Python-JSON

2024-09-24 04:26:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中有下面的JSON输出,我想通读这个列表,找到不等于“alias”:“read\u PRD”和“alias”:“WRITE\u PRD”和“alias”:“.kibana”的索引值,并将值存储在一个变量中

在下面的情况下,它是相同的值两次,所以只存储一次,否则存储两个值

我如何做到这一点

[
  {
    "alias": "READ_PRD",
    "index": "pI1",
    "filter": "-",
    "routing.index": "-",
    "routing.search": "-"
  },
  {
    "alias": "write_PRD",
    "index": "pI1",
    "filter": "-",
    "routing.index": "-",
    "routing.search": "-"
  },
  {
    "alias": ".kibana",
    "index": ".k_1",
    "filter": "-",
    "routing.index": "-",
    "routing.search": "-"
  },
  {
    "alias": "READ_STG",
    "index": "pI2",
    "filter": "-",
    "routing.index": "-",
    "routing.search": "-"
  },
  {
    "alias": "WRITE_STG",
    "index": "pI2",
    "filter": "-",
    "routing.index": "-",
    "routing.search": "-"
  }
]

Tags: json列表readsearchindexaliasfilterrouting
3条回答

为了便于查找,我会将您接受的alias条件保存在set中,然后您可以进行成员资格检查:

acceptable = {'READ_PRD', 'WRITE_PRD', '.KIBANA'}

for item in x:
    if item.get('alias', '').upper() not in acceptable:
        print(item)

   {
      "alias": "READ_STG",
      "index": "pI2",
      "filter": "-",
      "routing.index": "-",
      "routing.search": "-"
   },
   {
      "alias": "WRITE_STG",
      "index": "pI2",
      "filter": "-",
      "routing.index": "-",
      "routing.search": "-"
   }

调用str.upper()是为了说明资本化的差异

或者,使用filter语句:

list(filter(lambda y: y.get('alias', '').upper() not in acceptable, x))
[
   {
      "alias": "READ_STG",
      "index": "pI2",
      "filter": "-",
      "routing.index": "-",
      "routing.search": "-"
   },
   {
      "alias": "WRITE_STG",
      "index": "pI2",
      "filter": "-",
      "routing.index": "-",
      "routing.search": "-"
   }
]

假设JSON是一个名为a的字符串,则以下内容将按黑名单过滤

import json
a = """
[]
"""
j = json.loads(a)
blacklist = ['READ_PRD', 'write_PRD', '.kibana']
items = [item for item in j if item['alias'] not in blacklist]
print(items)

你可以这样在熊猫身上完成:

import pandas as pd
df.query("alias not in ['.kibana', 'write_PRD', 'READ_PRD']")[['alias', 'index']].to_dict(orient='records') 

输出

[{'alias': 'READ_STG', 'index': 'pI2'}, {'alias': 'WRITE_STG', 'index': 'pI2'}]

相关问题 更多 >