[英]Rearrange the output of a dictionary (Python)
我有以下代码:
dic = {'key1': [0, 0, 0], 'key2': [1, 1, 1], 'key3': [2, 2, 2]}
keys = dic.keys()
values = dic.values()
for i in range(0, len(keys)):
print keys[i]
for j in range(0, len(values)):
print values[i][j]
它产生的输出如下:
key3
2
2
2
key2
1
1
1
key1
0
0
0
我想要的是以下输出:
key3 key2 key1
2 1 0
2 1 0
2 1 0
非常感谢!
假设所有值列表具有相同的长度,并且keys
具有所需的标题顺序,则应这样做:
print '\t'.join(keys)
for row in zip(*[dic[k] for k in keys]):
print '\t'.join(map(str, row))
更新
我使用列表推导来保证顺序,但是根据Python 文档 ,如果字典之间没有变化,则dict.keys()和dict.values()的顺序可以保证。 考虑到这一点,可以删除上面的列表理解,并且代码可以很简单:
print '\t'.join(keys)
for row in zip(*values):
print '\t'.join(map(str, row))
哦,等等,我误解了这个问题,让我编辑。
看看是否喜欢:
dic = {'key1': [0, 0, 0], 'key2': [1, 1, 1], 'key3': [2, 2, 2]}
keys = dic.keys()
values = dic.values()
spacing = '{:<8}'
print ''.join(map(str, [spacing.format(element) for element in keys]))
for i in range(len(values)):
print ''.join(map(str, [spacing.format(element) for element in values[i]]))
重新排列循环,如下所示:
for i in range(len(keys)):
print keys[i],
print
for line in range(len(values)):
for column in range(len(keys)):
print values[column][line], ' ',#change the number of spaces to get the right fit
print
您要使用string.join,其文档可在此处找到string docs 。 因此,您可以使用以下行打印出所有密钥:
print " ".join(keys)
这将输出key3 key2 key1
您可以对值列表执行相同的操作。 但是,您可能需要使用以下行将值列表更改为所有字符串:
values[:] = [[str(x) for x in y] for y in values]
然后,由于它们都是字符串,因此可以对它们执行string.join()。
您可以执行以下操作:
dic = {'key1': [0, 0, 0], 'key2': [1, 1, 1], 'key3': [2, 2, 22222]}
def printTable (tbl, borderHorizontal = '-', borderVertical = '|', borderCross = '+'):
cols = [list(x) for x in zip(*tbl)]
lengths = [max(map(len, map(str, col))) for col in cols]
f = borderVertical + borderVertical.join(' {:>%d} ' % l for l in lengths) + borderVertical
s = borderCross + borderCross.join(borderHorizontal * (l+2) for l in lengths) + borderCross
print(s)
for row in tbl:
print(f.format(*row))
print(s)
sorted_keys=sorted(dic.keys(),reverse=True)
table=[sorted_keys]
for row in zip(*[dic[k] for k in sorted_keys]):
table.append(list(row))
printTable(table)
打印
+-------+------+------+
| key3 | key2 | key1 |
+-------+------+------+
| 2 | 1 | 0 |
+-------+------+------+
| 2 | 1 | 0 |
+-------+------+------+
| 22222 | 1 | 0 |
+-------+------+------+
做到了。
dic = {'key1': [0, 0, 0], 'key2': [1, 1, 1], 'key3': [2, 2, 2]}
keys = sorted(dic.keys(), reverse=True)
values = [map(str, dic[k]) for k in keys]
print '\t'.join(keys)
print '\n'.join(['\t'.join(v) for v in zip(*values)])
输出:
>>>
key3 key2 key1
2 1 0
2 1 0
2 1 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.