Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中最大子字典的大小_Python_Pyyaml - Fatal编程技术网

python中最大子字典的大小

python中最大子字典的大小,python,pyyaml,Python,Pyyaml,我将Python与YAML配置文件一起使用。我有这样一个YAML结构: --- structure: - some: keys subsection: sub1: val1 sub2: val2 - some: keys2 subsection: sub1: val21 sub2: val22 su

我将Python与YAML配置文件一起使用。我有这样一个YAML结构:

---
structure:
    -
        some: keys
        subsection:
            sub1: val1
            sub2: val2
    -
        some: keys2
        subsection:
            sub1: val21
            sub2: val22
            sub3: val23
            sub4: val24
“小节”的大小不是固定的,取决于条目。 我将使用PyYAML将配置作为字典加载到python脚本中。 如何快速检查最大的“分段”有多大?那么在这种情况下,我怎么能发现最大的子段是四个条目的长度呢?有没有一种不重复的聪明方法

多谢各位

编辑: 下面是python的最后一本词典:

data = yaml.load(...)
pprint(data)
{'name': 'value',
 'structure': [{'some': 'keys',
                'subsection': {'sub1': 'val1', 'sub2': 'val2'}},
               {'some': 'keys2',
                'precursor': {'sub1': 'val21',
                              'sub2': 'val22',
                              'sub3': 'val23',
                              'sub4': 'val24'}}
               ]}
使用内置软件尝试此操作,并使用:


您应该检查项目的类型,否则顶级键也将返回值,但实际上不是子部分。

假设您的文本位于文件
input.xml

from ruamel.yaml import load

def get_longest(d, max_length=0):
    if isinstance(d, dict):
        try:
            l = len(d['subsection'])
            if l > max_length:
                max_length = l
        except:
            pass  # no key "subsection"
        for val in d.values():
            max_length = get_longest(val, max_length)
    elif isinstance(d, list):
        for item in d:
            max_length = get_longest(item, max_length)
    return max_length

data = load(open('input.yml'))
将打印您的
4
。当然,如果您知道所有“分段”键都处于某个深度,那么您可以进行优化。以上内容并不期望它们位于序列/映射层次结构中的某个位置或级别

我已经使用了增强版的PyYAML(),但出于这个目的,对于较旧的PyYAML也应该是一样的

print get_longest(data)

字典是什么样子的?数据[“结构”][{“一些”:“键”,“小节”:{…},{“一些”:“键2”,“小节”:{…}]仍然不清楚,请在问题中附上示例字典。@ZdaR为什么需要字典来让事情更清楚,
yaml.load()
将从给定的YAML源中唯一地为您提供。
print get_longest(data)