python中最大子字典的大小

2024-05-16 13:49:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我将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'}}
               ]}

Tags: yamlsomekeysstructuresubsectionval1val2sub1
2条回答

使用内置的lenmaxgenerator试试这个:

top = {
    "somekey":"somevalue",
    "sub1":
        {"subsub1":1,"subsub2":2},
    "sub2":
        {"subsub1":1,"subsub2":2,"subsub3":3}
}
print max(len(item) for key,item in top.items() if isinstance(item,dict))
#3

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

假设您的文本在文件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(ruamel.yaml),但是出于这个目的,这应该对旧版的PyYAML起同样的作用。你知道吗

print get_longest(data)

相关问题 更多 >