Python 将多个键/值关联到defaultdict(列表)

Python 将多个键/值关联到defaultdict(列表),python,Python,我有一个带有记录列表的json_数据对象。我需要列表中的所有“id”,并且我想以某种方式将“room”和“name”键的值与id列表相关联。 我之所以需要列表中的所有ID,是因为我使用的API将ID作为列表进行批量处理。我还需要将“name”和“room”键中的值与id列表相关联。我可以使用defaultdictlist将“room”与列表关联,但不确定如何也关联“name”键的值。我该怎么做 json_data = { "records": [ { "id":

我有一个带有记录列表的json_数据对象。我需要列表中的所有“id”,并且我想以某种方式将“room”和“name”键的值与id列表相关联。 我之所以需要列表中的所有ID,是因为我使用的API将ID作为列表进行批量处理。我还需要将“name”和“room”键中的值与id列表相关联。我可以使用defaultdictlist将“room”与列表关联,但不确定如何也关联“name”键的值。我该怎么做

json_data = {
    "records": [
    {
        "id": 123,
        "name": "John",
        "room": "32B"
    },
    {
        "id": 456,
        "name": "Mary",
        "room": "32B"
    },
        {
        "id": 789,
        "name": "Gary",
        "room": "16F"
    }]
}

data_list = json_data['records']
my_default_dict = defaultdict(list)
for data in data_list:
    my_default_dict[data['room']].append(data['id'])
    # This gives {'32B': [123, 456], '16F': [789]}

为什么不将您的数据转换为ID映射?然后,您可以从地图中将ID列表提取为键

records = json_data['records']
# Warning! This destructively iterates over json_data.
json_map = dict(zip((d.pop('id') for d in records), records))

json_map
# {123: {'name': 'John', 'room': '32B'},
#  456: {'name': 'Mary', 'room': '32B'},
#  789: {'name': 'Gary', 'room': '16F'}}

id_list = list(json_map)
# [123, 456, 789]

您可以按“房间”对记录进行分组

然后你可以得到一个“id”的列表


你能举一个你想要的输出的例子吗?也许像{'32B':[[123456],'John','Mary']],'17F':[[789],'Gary']}我很喜欢这个。聪明的只有一个微不足道的建议。。。您还可以将zip直接传递给dict构造函数。记录中d的json_map=dictzipd.pop'id',记录
records = json_data['records']
new_records = defaultdict(list)
for record in records:
    new_records[record['room']].append(record)
ids_for_32b = [item['id'] for item in new_records['32B']]
print(ids_for_32b)