如何将词典列表转换为嵌套词典?

时间:2020-01-25 22:37:23

标签: python list dictionary

如何将字典列表转换为嵌套字典,其中值是列表中的字典,键是列表中每个字典的位数?

我正在使用Python工作,目前我有大约一千本字典的列表(准确地说是982个)。我正在尝试(并且目前失败)使用字典列表填充值,同时使用原始列表中每个字典的位置填充键(0为第一,1为第二,依此类推)。但是,我很难做到这一点。

在最初尝试这样做时,我仅使用dict.fromkeys,如下所示:

newdict = dict.fromkeys(range(982)), dict_list)

但是,该命令从未完成,因此我认为它存在问题,并开始寻找其他解决方案。

从那时起,我一直试图写一个for循环,在列表中循环,并使用dict.fromkeys创建新的字典。例如,

for x in dict_list:
    newdict = dict.fromkeys(range(982), x)

此代码按预期方式(从0-981)填充我字典的键,但是为所有新字典值插入相同的字典(从字典列表中)。该词典是原始词典列表中列出的最后一个。 为了清楚起见,下面是输出的示例:

{0 : {'Male': 506, 'Female': 476}
{1 : {'Male': 506, 'Female': 476}
{2 : {'Male': 506, 'Female': 476}

...等等。

有人可以帮助我确定第二次尝试完成此操作的问题吗?我想念什么?

1 个答案:

答案 0 :(得分:5)

无需遍历列表。由于我们有一个可迭代的字典,它是您的字典列表,因此我们可以简单地使用内置的enumerate将其转换为嵌套字典。

x = [{'Male': 506, 'Female': 476}, {'Male': 507, 'Female': 477}]

dict(enumerate(x))
{0: {'Female': 476, 'Male': 506}, 1: {'Female': 477, 'Male': 507}}

关于您的尝试不正确的原因。

您正在遍历字典列表,并将newdict设置为等于表达式的值。您无需使用此变量,也无需将其保存在任何位置,因此只有在循环完成后才可以访问它,这就是为什么它仅用词典列表中的最后一项填充的原因。