如何将字典元素动态分组到列表中?

2024-09-25 02:34:22 发布

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

I have JSON file as mentioned below,
**test.json**

    {
    "header1" :
       {
           "header1_body1":
              {
               "some_key":"some_value",
                .......................
              },
          "header1_body2":
              {
                "some_key":"some_value",
                 .......................
              }

       },
    "header2":
       {
          "header2_body1":
              {
               "some_key":"some_value",
                .......................
              },
          "header2_body2":
              {
                "some_key":"some_value",
                 .......................
              }
    }
}

希望将JSON内容分组到如下列表中:

header1 = ['header1_body1','header1_body2']
header2 = ['header2_body1','header2_body2']

header1, header2 can be till ....header n。因此,必须创建包含其值的动态列表,如上所示。你知道吗

我怎样才能做到这一点? 最好的方法是什么?你知道吗

解决方案:

with open('test.json') as json_data:
      d = json.load(json_data)

for k,v in d.iteritems():
      if k == "header1" or k == "header2":
            globals()['{}'.format(k)] = d[k].keys()

现在,header1header2可以作为列表访问。你知道吗

for i in header1:
    print i

Tags: keyintestjson列表fordatavalue
3条回答

修复json结构:

{
"header1" :
   {
       "header1_body1":
          {
           "some_key":"some_value"
          },
      "header1_body2":
          {
            "some_key":"some_value"
          }

   },
"header2":
    {
      "header2_body1":
          {
           "some_key":"some_value"
          },
      "header2_body2":
          {
            "some_key":"some_value"
          }
    }
}

然后加载并创建列表:

header = []

for key, value in dictdump.items():

    header.append(list(value.keys()))

for header_num in range(0, len(header)):
    print("header{} : {}".format(header_num + 1, header[header_num]))

提供:

header1 : ['header1_body1', 'header1_body2']
header2 : ['header2_body1', 'header2_body2']

加载json后,您可以通过执行以下操作来获得任何键的列表(headers下面的变量是加载的json的占位符)。您不需要将它转换为列表以将其作为iterable使用,而是将它包装在list(...)中以匹配问题中的输出。你知道吗

list(headers['header1'].keys())

如果您需要以某种可访问的格式实际存储每个“header”dict的键列表,那么您可以创建另一个包含所需列表的字典。例如:

import json

data = """{
    "header1" : {
        "header1_body1": {
             "some_key":"some_value"
             },
        "header1_body2": {
            "some_key":"some_value"
            }
        },
    "header2": {
        "header2_body1": {
            "some_key":"some_value"
            },
        "header2_body2": {
            "some_key":"some_value"
            }
        }
    }"""

headers = json.loads(data)

# get the list of keys for a specific header
header = list(headers['header1'].keys())
print(header)
# ['header1_body1', 'header1_body2']

# if you really want to store them in another dict
results = {h[0]: list(h[1].keys()) for h in headers.items()}
print(results)
# OUTPUT
# {'header1': ['header1_body1', 'header1_body2'], 'header2': ['header2_body1', 'header2_body2']}

假设您将JSON读入一个变量d(可能使用json.loads),那么您可以迭代键(排序?)并用当前值的键构建列表:

for key in sorted(d.keys()):
    l = [x for x in sorted(d[key].keys())]  # using list comprehension
    print(key + ' = ' + str(l))

相关问题 更多 >