Python 如何使用pprint打印前10行而不是整个列表

Python 如何使用pprint打印前10行而不是整个列表,python,Python,我试图完成的是使用pprint(dict(stru类型)) 这是我的密码 from collections import defaultdict str_type_re = re.compile(r'\b\S+\.?$', re.IGNORECASE) expected = ["Street", "Avenue", "Boulevard", "Drive", "Court", "Place", "Square", "Lane", "Road", "Trail", "

我试图完成的是使用
pprint(dict(stru类型))

这是我的密码

from collections import defaultdict

str_type_re = re.compile(r'\b\S+\.?$', re.IGNORECASE)

expected = ["Street", "Avenue", "Boulevard", "Drive", "Court", "Place", "Square", "Lane", "Road", 
            "Trail", "Parkway", "Commons"]

def audit_str_type(str_types, str_name, rex):
    stn = rex.search(str_name)
    if stn :
        str_type = stn.group()
        if str_type not in expected:
            str_types[str_type].add(str_name)
我定义了一个函数,用于审核k=“addr:street”中的标记元素,以及任何与is_str_name函数匹配的标记元素

def audit(osmfile,rex):
    osm_file = open(osmfile, "r", encoding="utf8")
    str_types = defaultdict(set)
    for event, elem in ET.iterparse(osm_file, events=("start",)):

        if elem.tag == "node" or elem.tag == "way":
            for tag in elem.iter("tag"):
                if is_str_name(tag):
                    audit_str_type(str_types, tag.attrib['v'],rex)

    return str_types
在上面的代码中,我使用“is_str_name”函数在调用审计函数审计街道名称时过滤标记

def is_str_name(elem):
    return (elem.attrib['k'] == "addr:street")

str_types = audit(mydata, rex = str_type_re)
pprint.pprint(dict(str_types[:10]))
用于获取对象的字符串表示形式,而不是直接打印,然后可以将其按行拆分,并仅打印前几行:

whole_repr = pprint.pformat(dict(str_types))

for line in whole_repr.splitlines()[:10]:
    print(line)
请注意,由于您没有MCVE,我无法对此进行测试,但我使用了一个更简单的示例进行了验证:

>>> import pprint
>>> thing = pprint.pformat({i:str(i) for i in range(10000)})
>>> type(thing), len(thing)
(<class 'str'>, 147779)
>>> for line in thing.splitlines()[:10]:print(line)

{0: '0',
 1: '1',
 2: '2',
 3: '3',
 4: '4',
 5: '5',
 6: '6',
 7: '7',
 8: '8',
 9: '9',
导入pprint >>>thing=pprint.pformat({i:str(i)表示范围(10000)内的i}) >>>类型(事物),len(事物) (, 147779) >>>对于对象中的行。拆分行()[:10]:打印(行) {0: '0', 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9',
添加
import re
后,我得到了
name错误:名称“mydata”未定义
请提供一个或至少是您得到的输出和预期输出。
pprint.pprint(dict(str_types[:10]))
这有什么问题,它看起来确实只打印了10个。这真的需要一个。@MorganThrapp
str\u types
是一个
defaultdict
,它不支持切片。(但是,是的,这缺少了一个MCVE)@TadhgMcDonald Jensen哦,你是对的。顺便说一句,这就是为什么MCVE会非常有用的原因。