如何将值格式化为字典中的列表

时间:2018-04-06 18:15:04

标签: python python-3.x

我试图自己做一些简单的项目来更好地学习python,我想要做的是将值格式化为字段。我设法按升序对键进行排序,并将键与各自的列表进行匹配。 我知道为什么只有列表中的第一个单词被格式化,这是因为它被视为一个中间有空格的字符串,我完全不知道如何继续

它应该是这样的:

Id      name      species      age      spayed/neutered
1020    b         cat          9        yes
1022    brn       dog          10       no
1023    bren      cat          2        yes

这是将显示字典信息的相关功能,以及我目前的进展情况。

cust_rec = {'1020': ['b','cat','9','yes'], '1023': ['brn','dog','10','no'], '1022': ['bren','cat','2','yes']}

def cust_disp (cust_rec):

    for key in sorted(cust_rec.keys()):
    print("{0:12s} {1:10s} {2:10s} {3:4s} {4:s}".format("ID","Name","Species","Age","Spayed/Neutered"))
    print ("{0:12s} {1:10s}".format(key, " ".join(cust_rec[key])  ) )

如果我需要澄清任何事情,请告诉我。

3 个答案:

答案 0 :(得分:0)

熊猫可能是一个不错的选择

import pandas as pd
pd.DataFrame(cust_rec).T

否则试试这个:

for key, vals in cust_rec.iteritems():
    to_print = '\t'.join(str(val) for val in vals)
    print key + '\t' + to_print

答案 1 :(得分:0)

您可以将格式化数据放入list,然后加入列表

cust_rec = {
    "Id": ["name", "species", "age", "spayed/neutered"],
    '1020': ['b', 'cat', '9', 'yes'],
    '1023': ['brn', 'dog', '10', 'no'],
    '1022': ['bren', 'cat', '2', 'yes']
}

a = [
    f"{k:>15} {v[0]:>15} {v[1]:>15} {v[2]:>15} {v[3]:>15}"
    for k, v in cust_rec.items()
]

if __name__ == '__main__':
    print("\n".join(a))

打印

         Id            name         species             age spayed/neutered
       1020               b             cat               9             yes
       1023             brn             dog              10              no
       1022            bren             cat               2             yes

答案 2 :(得分:0)

你正在做的是创建一个列表的字符串,在元素之间有一个空格。你想要做的是使所有的字符串长度相同,白色空格填充剩余的所需长度,然后将它们连接成一个字符串。你可以用ljust string方法做到这一点。

def cust_disp(cust_rec):
    columns = ["ID", "Name", "Species", "Age", "Spayed/Neutered"]
    formated_columns = "".join([column.ljust(10, " ") for column in columns])
    print(formated_columns)
    for key in sorted(cust_rec.keys()):
        print("{0:10s}{1}".format(
            key, "".join([field.ljust(10, " ") for field in cust_rec[key]])))