我有一个字典:
dic={'Tim':3, 'Kate':2}
我想将其输出为:
Name Age
Tim 3
Kate 2
将它们首先转换为一个字典列表,这是一个好的方法吗?
lst = [{'Name':'Tim', 'Age':3}, {'Name':'Kate', 'Age':2}]
然后按照https://dev59.com/M2kv5IYBdhLWcg3wwTdm#10373268中的方法将它们写入表格中?
或者有更好的方法吗?
我有一个字典:
dic={'Tim':3, 'Kate':2}
Name Age
Tim 3
Kate 2
将它们首先转换为一个字典列表,这是一个好的方法吗?
lst = [{'Name':'Tim', 'Age':3}, {'Name':'Kate', 'Age':2}]
然后按照https://dev59.com/M2kv5IYBdhLWcg3wwTdm#10373268中的方法将它们写入表格中?
或者有更好的方法吗?
不要将其转换为字典列表,直接使用字典的 .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))
你可以使用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
您可以直接像这样进行操作:
>>> 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']))
针对您的最后一个问题 - 将它们首先转换为字典列表是一个好方法吗? 答案是不是,字典是哈希的,比列表提供更快的访问速度。
你可以这样做,
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 使用了类似的实现方式
迭代字典并打印每个条目。
演示:
>>> 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
>>>
>>> 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())
。如果您选择更高的数字,那么在第一列中放置数字通常是一个更安全的选择,因为您永远不知道名称可能有多长。
考虑到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
for each in zip(*([i] + (j) for i, j in c.items())):
print(*each)
timeit
模块测试多种方法。在这里,我已经为您运行了一些测试:http://repl.it/f2W/1 为了运行更加密集的测试,我建议您使用终端,因为repl.it速度较慢。使用dic.items()
似乎是最稳定快速的方法。 - Shashank