[英]Is there an elegant way to create a dictionary of arrays?
我经常分析具有父子关系的数据:
data = [
{'data': 'somedata', 'id': 1, 'parentId': 0},
{'data': 'somedata', 'id': 2, 'parentId': 1},
{'data': 'somedata', 'id': 3, 'parentId': 0},
{'data': 'somedata', 'id': 4, 'parentId': 3},
{'data': 'somedata', 'id': 5, 'parentId': 3},
]
通常,我将使用这样的循环来创建新的数据结构,以便可以轻松地关联父数据和子数据:
for item in data:
if item["parentId"] != 0:
if item["parentId"] in parents:
parents[item["parentId"]].append(item["id"])
else:
parents[item["parentId"]] = []
parents[item["parentId"]].append(item["id"])
这将产生以下数据:
print parents
{1: [2], 3: [4, 5]}
有没有更优雅的方式来创建“父母”数据结构?
我不知道,您所说的更加优雅意味着什么。 如果您正在编写一些解析脚本,那么似乎可以使用内置结构。 那么,您是在询问使用的数据结构还是代码?
我看到的一件事是,您可以使用setdefault
而不是检查字典中是否具有某些键:
for item in data:
if item["parentId"] != 0:
parents.setdefault(item["parentId"], []).append(item['id'])
如果您的Python版本包含collections.defaultdict
,则可以执行以下操作:
from collections import defaultdict
def make_parent_dict(data):
parents = defaultdict(list) # Use empty list for missing entries
for item in data:
parent = item['parentId']
if parent != 0:
parents[parent].append(item['id'])
return dict(parents) # Convert back to normal dict
example = [
{'data': 'somedata', 'id': 1, 'parentId': 0},
{'data': 'somedata', 'id': 2, 'parentId': 1},
{'data': 'somedata', 'id': 3, 'parentId': 0},
{'data': 'somedata', 'id': 4, 'parentId': 3},
{'data': 'somedata', 'id': 5, 'parentId': 3},
]
>>> print make_parent_dict(example)
{1: [2], 3: [4, 5]}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.