繁体   English   中英

将多个键/值关联到defaultdict(list)

[英]Associate multiple key/values to a defaultdict(list)

我有带有记录列表的json_data对象。 我需要列表中的所有“ id”,并且我想以某种方式将“ room”和“ name”键中的值关联到ID列表。 之所以需要列表中的所有ID,是因为Im正在使用将ID作为批量处理列表的API。 我还需要将“名称”和“房间”键中的值关联到ID列表。 我能够使用defaultdict(list)将“ 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]

您可以按'room'对记录进行分组。

records = json_data['records']
new_records = defaultdict(list)
for record in records:
    new_records[record['room']].append(record)

然后,您可以获得'id'的列表。

ids_for_32b = [item['id'] for item in new_records['32B']]
print(ids_for_32b)

暂无
暂无

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

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