【问题标题】:How to create a nested dictionary and add items to it via adding more arguments [python]如何创建嵌套字典并通过添加更多参数向其中添加项目 [python]
【发布时间】:2022-10-13 16:29:49
【问题描述】:

我不知道如何表达这个问题,但我想要做的是创建一个嵌套字典,其中包含相应参数的文件名称,其中值是相应参数的 numpy 文件。当更多元素被添加到特定参数时(因此任务或分数列表中的元素更多),它应该相应地添加到字典中。这是我尝试过的东西:

def mk_dict(task, score, datadir):
    for id, t in enumerate(task):
        for id, s in enumerate(score):
            all_f = glob.glob(opj(datadir, rf"{t}\sub-*\*{s}.npy"))
            d = defaultdict(dict)
            d[t][s] = np.load(all_f[id])
            return d


dir = r"C:\Users\....."

tasks = ["high", "medium", "low"]
scores = ["precision", "accuracy", "f1"]

dic = mk_dict(tasks, scores, dir)

我的输出是:{"high": {"precision": array...}} 只取每个列表的第一个元素。

我之前做过其他事情,我的输出是:{"high": {"precision":array}, "high":{"accuracy":array} etc..}

然而,我想要的输出是:

{"high": {"precision":array, "accuracy":array, "f1":array}, "medium": {"precision":array, "accuracy":array, "f1":array}, "low".....etc....}}

我已经为此苦苦挣扎了一段时间。任何帮助表示赞赏,非常感谢!

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    假设以下情况:

    您有一个名为 dir 的目录,其中包含名称为 high、medium 和 low 的子文件夹。这些子文件夹中的每一个都包含 sub-* 文件夹。 对于每个 sub-* 文件夹,有三个文件:precision.npy、accuracy.npy 和 f1.npy。所有这些文件每个都包含一个 numpy 数组。

    如果我的假设是正确的,下面的代码将处理你想要的一切。

    import glob
    import os
    import numpy as np
    
    def mk_dict(task, score, datadir):
        d = {}
        for t in task:
            d[t] = {}
            for s in score:
                all_f = glob.glob(opj(datadir, rf"{t}sub-**{s}.npy"))
                d[t][s] = np.load(all_f[0])
        return d
    

    【讨论】:

    • 嗨,卢克,非常感谢您的快速回答!是的,你的假设是正确的,对不起,我不太清楚。我不确定这个函数是否可以以 'for s' 结尾?是否应该在 for t in tasks 之前是“for s in scores”?回报是 d?
    • 道歉,尝试修改
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多