无需迭代即可读取嵌套字典的简单方法

Simple way to read nested dictionary without iterating

我有一个这样的嵌套字典:

nest_dict = {
    "1": {
        "Name": X,
        "Class": "10",
        "Roll_no": 19289,
        "Marks": 126
    },
    "2": {
        "Name": Y,
        "Class": "12",
        "Roll_no": 19290,
        "Marks": 124
    }
}.

请注意,每个子条目都有相同的键集,即名称、Class、Roll_no、标记。如何获取 all_Names = [X, Y]all_Class = [10, 12]all_Roll_no = [19289, 19290]all_Marks = [126, 124] 的列表,而不必遍历前一级别的条目,即 1,2。应该有一些简单的方法来实现这一点,对吧? (我正在尝试使用 python3 从 json 文件中解析。)

你应该迭代。代码足够简单,快速且高效。我没有看到很多其他解决方法。

示例:

nest_dict = {
    "1": {
        "Name": "X",
        "Class": "10",
        "Roll_no": 19289,
        "Marks": 126
    },
    "2": {
        "Name": "Y",
        "Class": "12",
        "Roll_no": 19290,
        "Marks": 124
    }
}


all_roll_numbers = set()
all_names = set()
all_classes = set()
all_marks = set()

for data in nest_dict.values():
    all_names.add(data["Name"])
    all_classes.add(data["Class"])
    all_roll_numbers.add(data["Roll_no"])
    all_marks.add(data["Marks"])

不同的看法:

data = {
    "Name": set(),
    "Class": set(),
    "Roll_no": set(),
    "Marks": set()
}

for item in nest_dict.values():
    for key, value in item.items():
        data[key].add(value)

There should be some simple way to achieve this, right?

这样简单吗?:

import pandas as pd

nest_dict = {
    "1": {
        "Name": 'X',
        "Class": "10",
        "Roll_no": 19289,
        "Marks": 126
    },
    "2": {
        "Name": 'Y',
        "Class": "12",
        "Roll_no": 19290,
        "Marks": 124
    }}

res = pd.DataFrame(nest_dict.values()).T.apply(list,1).to_dict()

>>> res
'''
{'Name': ['X', 'Y'],
 'Class': ['10', '12'],
 'Roll_no': [19289, 19290],
 'Marks': [126, 124]}

all_Names = [y['Name'] for x,y in nest_dict.items()] 等等 'Class', 'Roll_no', ...应该足够简单了。