按行打印字典

时间:2016-07-08 16:44:37

标签: python dictionary

我有这种格式的字典:

d = {'type 1':[1,2,3],'type 2':['a','b','c']}

它是一个对称词典,在某种意义上说,对于每个键,我总是会有相同数量的元素。

有一种方法可以循环,就好像是行:

for row in d.rows():
    print row

所以我得到了输出:

[1]: 1, a
[2]: 2, b
[3]: 3, b

3 个答案:

答案 0 :(得分:3)

您可zip .values(),但订单无法保证,除非您使用的是collections.OrderedDict(或fairly recent version of PyPy):

for row in zip(*d.values()):
    print(row)

e.g。当我跑这个时,我得到了

('a', 1)
('b', 2)
('c', 3)

但我可以很容易地得到:

(1, 'a')
(2, 'b')
(3, 'c')

(如果启用了哈希随机化,我可能会在以后的运行中得到它。)

如果你想要一个指定的订单,并且拥有一组你知道的有限的密钥,你可以直接压缩这些项目:

zip(d['type 1'], d['type 2'])

答案 1 :(得分:1)

如果您希望按行按字母顺序排序,可以考虑:

zip(*(v for k, v in sorted(d.iteritems())))
# [(1, 'a', 'd', 4), (2, 'b', 'e', 5), (3, 'c', 'f', 6)]

如果您的数据集很大,请考虑使用itertools.izip或pandas。

import pandas as pd
df = pd.DataFrame(d)
print df.to_string(index=False)

# type 1 type 2 type 3  type 4
#      1      a      d       4
#      2      b      e       5
#      3      c      f       6

print df.to_csv(index=False, header=False)

# 1,a,d,4
# 2,b,e,5
# 3,c,f,6

答案 2 :(得分:1)

即使您将字典传递给 OrderedDict ,您也不会将结果作为字典条目获得。所以这里的元组元组可能是个不错的选择。

请参阅下面的代码和输出:

代码(Python 3):

import collections
t = (('type 1',[1,2,3]),
     ('type 2',['a','b','c']),
     ('type 4',[4,5,6]),     
     ('type 3',['d','e','f']))
d = collections.OrderedDict(t)
d_items = list(d.items())
values_list = []
for i in range(len(d_items)):
    values_list.append(d_items[i][1])
values_list_length = len(values_list)
single_list_length = len(values_list[0])
for i in range(0,single_list_length):
    for j in range(0,values_list_length):
        print(values_list[j][i],' ',end='')
    print('')

<强>输出:

1  a  4  d 
2  b  5  e 
3  c  6  f