2015-06-05 128 views
1

我有一个OrderedDict,我已经将它导出到csv,但我希望它的格式不同。python重新格式化字典输出

我阅读代码,整理,使词典:

from collections import defaultdict, OrderedDict 

counts = defaultdict(lambda: {"User": 0, "Equipment": 0, "Neither": 0}) 
with open('sorterexample.csv', 'rb') as fh: 
    reader = csv.reader(fh, delimiter=',') 
    headerline = reader.next() 
    for row in reader: 
     company, calltype = row[0], row[2] 
     counts[company][calltype] += 1 
     sorted_counts = OrderedDict(sorted(counts.iteritems(), key=lambda counts_tup: sum(counts_tup[1].values()), reverse=True)) 

print(sorted_counts) 
    writer = csv.writer(open('sortedcounts.csv', 'wb')) 
    for key, value in sorted_counts.items(): 
     writer.writerow([key, value]) 

我的输出中:

OrderedDict([('Customer1', {'Equipment': 0, 'Neither': 1, 'User': 4}), ('Customer3', {'Equipment': 1, 'Neither': 1, 'User': 2}), ('Customer2', {'Equipment': 0, 'Neither': 0, 'User': 1}), ('Customer4', {'Equipment': 1, 'Neither': 0, 'User': 0})]) 

我的CSV:

Customer1, {'Equipment': 0, 'Neither': 1, 'User': 4} 
Customer3, {'Equipment': 1, 'Neither': 1, 'User': 2} 
Customer2, {'Equipment': 0, 'Neither': 0, 'User': 1} 
Customer4, {'Equipment': 1, 'Neither': 0, 'User': 0} 

我希望它看起来像这样:

Top Calling Customers,   Equipment, User, Neither, 
Customer 1,      0,   4,  1, 
Customer 3,      1,   2,  1, 
Customer 2,      0,   1,  0, 
Customer 4,      1,   0,  0, 

我该如何格式化它才能在我的csv中显示这种方式?我看了https://docs.python.org/2.7/howto/sorting.html,itemgetter(),并按python(How do I sort a list of dictionaries by values of the dictionary in Python?)中的值排序字典,但我仍然无法使它看起来如何我想要的。

+1

看看http://stackoverflow.com/questions/8331469/python-dictionary-to-csv – kponz

+0

@kponz说实话,我没有发现他是特别有帮助的/她试图让字典回到一个CSV ...我没有问题。这是我无法解决的格式。 – jenryb

回答

1

这将按照您描述的方式进行格式化:首先使用列表中的第一个条目写入标题行,以找出列的名称,然后写入其余行。

writer = csv.writer(open('sortedcounts.csv', 'wb')) 
header = ['Top Calling Customers'] + list(list(sorted_counts.values())[0].keys()) 
writer.writerow(header) 
for key, value in sorted_counts.items(): 
    writer.writerow([key] + list(value.values()))