将字典打印成表格

4

属性名称存储在哪里? - Vedaad Shakib
@Ved:在表格中,作为第一行。 - Tim
打印标题行,然后迭代键值对并打印键,后跟值 - Julien Spronck
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Bhargav Rao
您可以使用timeit模块测试多种方法。在这里,我已经为您运行了一些测试:http://repl.it/f2W/1 为了运行更加密集的测试,我建议您使用终端,因为repl.it速度较慢。使用dic.items()似乎是最稳定快速的方法。 - Shashank
7个回答

11

不要将其转换为字典列表,直接使用字典的 .items 来获取每行显示的值:

print('Name Age')
for name, age in dic.items():
    print(f'{name} {age}')
在缺少f-string支持的3.6版本之前,我们可以这样做:
print('Name Age')
for name, age in dic.items():
    print('{} {}'.format(name, age))

11

你可以使用pandas。

In [15]: import pandas as pd

In [16]: df = pd.DataFrame({'Tim':3, 'Kate':2}.items(), columns=["name", "age"]) 

In [17]: df
Out[17]: 
   name  age
0   Tim    3
1  Kate    2

4

您可以直接像这样进行操作:

>>> print("Name\tAge")
Name  Age
>>> for i in dic:
...     print("{}\t{}".format(i,dic[i]))
... 
Tim 3
Kate    2
>>> 

如果作为脚本运行,则显示效果更佳。

Name    Age
Tim     3
Kate    2

而对于另一种表现方式
lst = [{'Name':'Tim', 'Age':3}, {'Name':'Kate', 'Age':2}]
print("Name\tAge")
for i in lst:
    print("{}\t{}".format(i['Name'],i['Age']))

针对您的最后一个问题 - 将它们首先转换为字典列表是一个好方法吗? 答案是不是,字典是哈希的,比列表提供更快的访问速度。


4

你可以这样做,

format = "{:<10}{:<10}"    
    print format.format("Name","Age")
    for name,age in dic.iteritems():
       print format.format(name,age)

我已经编写了一个简单的库,用于将字典格式化为表格 https://github.com/varadchoudhari/Neat-Dictionary 使用了类似的实现方式


1

迭代字典并打印每个条目。

演示:

>>> dic = {'Tim':3, 'Kate':2}
>>> print "Name\tAge"
Name    Age
>>> for i in dic.items():
...    print "%s\t%s"%(i[0], i[1])
... 
Tim 3
Kate    2
>>> 

通过 CSV 模块
>>> import csv
>>> dic = {'Tim':3, 'Kate':2}
>>> with open("output.csv", 'wb') as fp:
...     root = csv.writer(fp, delimiter='\t')
...     root.writerow(["Name", "Age"])
...     for i,j in dic.items():
...         root.writerow([i, j])
... 
>>> 

输出:output.csv文件内容

Name    Age
Tim     3
Kate    2

我们也可以使用 root.writerows(dic.items())

如何将内容写入控制台或标准输出,而不是写入文件?换句话说,如何以这种方式打印输出? - user8395964

1

如果您选择更高的数字,那么在第一列中放置数字通常是一个更安全的选择,因为您永远不知道名称可能有多长。

考虑到Python3:

dic={'Foo':1234, 'Bar':5, 'Baz':123467}

这个:

print("Count".rjust(9), "Name")
rint("\n".join(f'{v:9,} {k}' for k,v in dic.items()))

打印
    Count Name
    1,234 Foo
        5 Bar
  123,467 Baz

0
for each in zip(*([i] + (j) for i, j in c.items())):
    print(*each) 

对于每个在zip(*([i]+(j) for i,j in dict.items()))中的元素: print(*each) - Yash Goyal
嘿@yash-goyal,考虑将你的代码片段转换为Markdown代码块。这样做可以提高其他观看者的可读性,而且你的答案看起来更酷;)希望你在平台上享受愉快的旅程! - colin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接