我有这种格式的字典:
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
答案 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