You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求Python中更简洁优雅(Pythonic)的城市信息格式化打印方案

我完全理解你用一堆制表符凑对齐时那种乱糟糟的感受——不仅编写时繁琐,后续调整数据结构或者字段长度时更是头疼。这里有几个更优雅的替代方案,帮你轻松实现工整的城市信息输出:

方案1:用内置格式化字符串(f-string)精准控制对齐

这是最省心的内置方案,不需要额外依赖。核心思路是先计算每个字段的最大宽度,然后统一用固定宽度对齐,避免手动凑制表符的混乱。

举个实际例子,假设你的嵌套字典结构如下:

cities = {
    "北京": {
        "人口": "2154万",
        "面积": "16410km²",
        "GDP": "3.7万亿"
    },
    "上海": {
        "人口": "2487万",
        "面积": "6340km²",
        "GDP": "3.87万亿"
    }
}

你可以先计算所有城市名和子字段的最大宽度,然后用f-string的对齐语法(:<宽度左对齐,:^宽度居中,:>宽度右对齐)来输出:

# 获取用户输入
input_city = input("请输入城市名称: ").strip()

if input_city in cities:
    city_data = cities[input_city]
    
    # 计算字段名的最大宽度,保证对齐
    max_field_width = max(len(field) for field in city_data.keys())
    # 城市名预留足够宽度
    city_name_width = len(input_city) + 4
    
    print(f"\n{input_city:-<{city_name_width}}")
    for field, value in city_data.items():
        # 字段名左对齐,占max_field_width宽度,然后用冒号分隔,值左对齐
        print(f"  {field:<{max_field_width}}: {value}")
else:
    print("未找到该城市信息")

这种方式的好处是自适应字段长度,哪怕后续新增字段或修改字段名,代码也能自动调整对齐,不用手动改制表符。

方案2:用第三方库PrettyTable生成专业表格

如果想要更像“正规表格”的输出,PrettyTable绝对是首选——它能自动帮你处理边框、对齐、表头,代码极简。

首先安装库:

pip install prettytable

然后用它来输出城市信息:

from prettytable import PrettyTable

input_city = input("请输入城市名称: ").strip()

if input_city in cities:
    city_data = cities[input_city]
    table = PrettyTable()
    
    # 设置表头和内容行
    table.field_names = ["字段", "信息"]
    for field, value in city_data.items():
        table.add_row([field, value])
    
    # 可以设置对齐方式,比如所有内容左对齐
    table.align = "l"
    print(f"\n{input_city} 城市信息")
    print(table)
else:
    print("未找到该城市信息")

输出的表格会自带边框,字段和内容完美对齐,看起来非常规整,完全不用操心对齐细节。

方案3:用textwrap处理长文本缩进对齐

如果你的城市信息里有长段落(比如城市简介),textwrap模块可以帮你自动换行并保持缩进,避免内容溢出或对齐混乱:

import textwrap

cities_with_desc = {
    "成都": {
        "人口": "2119万",
        "面积": "14335km²",
        "简介": "成都是四川省省会,副省级市,是西部重要的经济、金融、文化、交通枢纽,拥有悠久的历史和丰富的美食文化,被誉为“天府之国”的核心城市。"
    }
}

input_city = input("请输入城市名称: ").strip()

if input_city in cities_with_desc:
    city_data = cities_with_desc[input_city]
    max_field_width = max(len(field) for field in city_data.keys())
    
    print(f"\n{input_city}")
    for field, value in city_data.items():
        if field == "简介":
            # 长文本自动换行,缩进2个空格,每行最多60字符
            wrapped_text = textwrap.fill(value, width=60, initial_indent="  ", subsequent_indent="  ")
            print(f"{field:<{max_field_width}}:\n{wrapped_text}")
        else:
            print(f"  {field:<{max_field_width}}: {value}")
else:
    print("未找到该城市信息")
额外小技巧:用空格替代制表符

如果你还是习惯用缩进体现层级,用固定数量的空格(比如4个)代替制表符会更稳定——因为不同终端的制表符宽度可能不一样(有的是4空格,有的是8空格),而固定空格能保证在任何环境下的缩进一致。

比如子字段内容前加4个空格,比\t更可控:

print(f"    {field}: {value}")

这样就不用再堆砌一堆\t来凑对齐了。

内容的提问来源于stack exchange,提问作者Foo Fighter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:56:05