简体   繁体   English

如何使用 Python 通过嵌套键对 json 进行分组?

[英]How to group a json by a nested key using Python?

Lets say we have a json object in Python:假设我们在 Python 中有一个 json object:

myJson = [
    {
        "id": "123",
        "name": "alex",
        "meta": {
                    "city": "boston"
        }
    },
    {
        "id": "234",
        "name": "mike",
        "meta": {
                    "city": "seattle"
        }
    },
    {
        "id": "345",
        "name": "jess",
        "meta": {
                    "city": "boston"
        }
    }
]

What is the most efficient way to group this data by city, so that we end up with a json in which we group the data by city such that we end up with a json as:按城市对这些数据进行分组的最有效方法是什么,因此我们最终得到 json,其中我们按城市对数据进行分组,最终得到 json:

myNewJson = [
    {
     "city": "boston",
     "people": [ ... ... ]
    },
    {
     "city": "seattle",
     "people": [ ... ]
    }
]

... in which the content of the people are included in "people" key. ... ...其中人的内容包含在“人”键中。

Thanks谢谢

Seems like a dictionary could work.似乎字典可以工作。 Use city names as the keys, and a list as the value.使用城市名称作为键,使用列表作为值。 Then at the end, go through the dictionary and convert it to a list.然后最后,通过字典 go 并将其转换为列表。

myJson = [
    {
        "id": "123",
        "name": "alex",
        "meta": {
                    "city": "boston"
        }
    },
    {
        "id": "234",
        "name": "mike",
        "meta": {
                    "city": "seattle"
        }
    },
    {
        "id": "345",
        "name": "jess",
        "meta": {
                    "city": "boston"
        }
    }
]

d = dict() # dictionary of {city: list of people}
for e in myJson:
  city = e['meta']['city']
  if city not in d:
    d[city] = list()
  d[city].append(e['name'])
  
# convert dictionary to list of json
result = list()
for key, val in d.items():
  result.append({'city': key, 'people': val})

print(result)

Try:尝试:

myJson = [
    {"id": "123", "name": "alex", "meta": {"city": "boston"}},
    {"id": "234", "name": "mike", "meta": {"city": "seattle"}},
    {"id": "345", "name": "jess", "meta": {"city": "boston"}},
]

out = {}
for d in myJson:
    out.setdefault(d["meta"]["city"], []).append(d["name"])

out = [{"city": k, "people": v} for k, v in out.items()]
print(out)

Prints:印刷:

[
    {"city": "boston", "people": ["alex", "jess"]},
    {"city": "seattle", "people": ["mike"]},
]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM