Python 字典 : changing the order of nesting

标签 python sorting list-comprehension dictionary

我有一个字典,有 300 个键值对,其中每个键都是整数,值是具有三个键值对的字典。内部字典都有相同的键,但值不同。整个事情看起来很像这样:

nested_dicts = 
{1: {'name1':88.4,
     'name2':22.1,
     'name3':115.7},
2:  {'name1':89.4,
     'name2':23.7,
     'name3':117.9}
...
300:{'name1':110.1,
     'name2':36.6,
     'name3':122.4}
 }

如果从上面的数据结构例子看不清楚,这个嵌套字典大概应该是这样的:

better_dict = 
{'name1': [88.4, 89.4, ..., 110.1],
 'name2': [22.1, 23.7, ..., 36.6],
 'name3': [115.7, 117.9, ..., 122.4]}

所以,我想做一个从 nested_dicts 到 better_dict 的转换。

我无法解决这个问题。我已经接近了,但我的麻烦来自于试图弄清楚如何确保结果列表的顺序正确。也就是说,列表中值的顺序应该对应于原始 nested_dict 的外部字典中的键。此外,我的代码使用了循环,但我觉得这是生成器/列表理解的自然应用。任何帮助,将不胜感激。

最佳答案

将输入字典调整为:

>>> nested_dicts
{0: {'name2': 22.1, 'name3': 115.7, 'name1': 88.4},
 1: {'name2': 23.7, 'name3': 117.9, 'name1': 89.4},
 2: {'name2': 36.6, 'name3': 122.4, 'name1': 110.1}}
>>> for i in sorted(nested_dicts):
    for k, v in nested_dicts[i].items():
        if k not in n:
            n[k] = [None] * len(nested_dicts)
        n[k][i] = v

>>> n
defaultdict(<class 'list'>, {'name2': [22.1, 23.7, 36.6],
 'name3': [115.7, 117.9, 122.4], 'name1': [88.4, 89.4, 110.1]})

我必须指出,考虑到对键的限制,您的原始结构只需要是字典列表即可。

ETA:您要求保留键顺序需要在原始 nested_dict 中使用适当的索引。即需要有一个从0开始的连续序列。

关于Python 字典 : changing the order of nesting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3167143/

相关文章:

Python - 将字典的字典写入 CSV

matlab - 将矩阵的所有 1 放入第 1 列,将 2 放入第 2 列等,将 NaN 放入空单元格

c++ - MFC的CListCtrl排序(SortItems)是稳定排序吗?

Python 元组而不是列表

functional-programming - 是否有 Python 惯用语用于评估具有短路的函数/表达式列表?

python - Windows 上的 GTK3 和 Python3?

python - ctypes:例如,正确地子类化 c_void_p 以传递和返回自定义数据类型

python - 迭代同一个列表两次并避免在 python 中重复

algorithm - 给定属性的最大前缀

python - 什么是可以用高阶函数棘手的列表推导来完成的事情的可靠示例?