簡體   English   中英

有沒有一種優雅的方法來創建數組字典?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM