【问题标题】:formart spacing between print dictionary打印字典之间的格式间距
【发布时间】:2017-04-20 08:40:47
【问题描述】:

我正在尝试从文件中的信息打印菜单,因此我获取了信息并创建了字典。我试图弄清楚是否有办法格式化值之间的间距,以便我可以将值与标题对齐。我还试图找出每个键及其值是否会在中间没有一行空格的情况下打印。 我的代码目前如下所示:

#import classes
import inventory


#define constant for file
INVENTORY = "inventory.txt"

#define main
def main():
    #create empty dictionary to fill later
    inventory_dict = {}
    #call function to process inventory
    process_inventory(inventory_dict)
    #call function to print menu
    menu(inventory_dict)


#define process file inventory function
def process_inventory(inventory_dict):

    #open inventory file
    inventory_file = open(INVENTORY, 'r')

    #create inventory instances
    for item in inventory_file:

        #split line to reash
        inventory_list = item.split(",")

        #create variables to store each quality
        item_id = inventory_list[0]
        item_name = inventory_list[1]
        item_qty = inventory_list[2]
        item_price = inventory_list[3]

        #create object
        product = inventory.Inventory(item_id,item_name,item_qty,item_price)

        #add qualities to inventory dictionary
        inventory_dict[item_id] = product

    #close file
    inventory_file.close()

#define function to print menu
def menu(inventory_dict):
    #print headers
    print("ID Item Price Qty Avaliable")

    #print object information
    for object_id in inventory_dict:
        print(inventory_dict[object_id])

    #print how to exit
    print("Enter 0 when finished")

    #print blank line
    print(" ")

打印字典时,输出如下:

Output

为什么它打印前两个键的值一行又一行,没有空格,而其他键之间有一行?我想将每个值与其标题对齐。那可能吗?如果有怎么办?我能想到的唯一方法是使用打印功能并自己格式化。

【问题讨论】:

标签: python dictionary printing format alignment


【解决方案1】:

它们不对齐的原因是因为每个项目的长度不同。每行中的第一项越长,越向右推动下一项。

这是修复此问题的 menu 函数的修改版本:

def menu(inventory_dict):
    maxLength = 0
    for row in inventory_dict.values():
        for item in row.values():
            maxLength = max(len(item), maxLength) # If the item is longer than our current longest, make it the longest
    #print headers
    for header in ("ID", "Item", "Price", "Qty", "Avaliable"):
        print(header.ljust(maxLength)) # Fill spaces in until the header is as long as our longest item
    print()

    #print object information
    for row in inventory_dict.values():
        for item in row.values():
            print(item.ljust(maxLength)) # Fill spaces in until the header is as long as our longest item

    #print how to exit
    print("Enter 0 when finished")

    #print blank line
    print()

我无法验证它是否有效,因为我没有您的 inventory 模块。

【讨论】:

    猜你喜欢
    • 2017-01-01
    • 1970-01-01
    • 2016-05-10
    • 2016-02-25
    • 2023-03-27
    • 2019-11-15
    相关资源
    最近更新 更多