Python 如何使用新行将默认字典值写入文件?

Python 如何使用新行将默认字典值写入文件?,python,python-2.7,Python,Python 2.7,我有下面的字典。我正在尝试将字典的值写入一个文件。但它是用一行字写的。我想在每个项目后添加新行字符。帮忙 defaultdict(<type 'list'>, {'11163722404385': [('#3\n', '2089', '', '', '', 'Con verted', '', '', '', 'Mon Apr 22 13:32:00 PDT 2013', 'UNATT')], '1116372240485': [('#3\n', '2089', '', '', '

我有下面的字典。我正在尝试将字典的值写入一个文件。但它是用一行字写的。我想在每个项目后添加新行字符。帮忙

defaultdict(<type 'list'>, {'11163722404385': [('#3\n', '2089', '', '', '', 'Con  verted', '', '', '', 'Mon Apr 22 13:32:00 PDT 2013', 'UNATT')], '1116372240485':
 [('#3\n', '2089', '', '', '', 'Converted', '', '', '', 'Mon Apr 22 13:31:00 PDT
 2013', 'UNATT'), ('#3\n', '2089', '', '', '', 'Converted', '', '', '', 'Mon Apr
 22 13:31:14 PDT 2013', 'UNATT'), ('#3\n', '2089', '', '', '', 'Converted', '',
'', '', 'Mon Apr 22 13:32:00 PDT 2013', 'UNATT')]})

accounts = defaultdict(list)
with open('C:\fileReport.txt', 'a') as csvoutput:  
  writer = csv.writer(csvoutput)
  for sid,data1 in accounts.iteritems():
    report = [';'.join(items) for items in data1]
   print report
   finalReport = ['{},{}'.format(sid, ''.join(report))]
   writer.writerow(report)
   writer.writerow('\n')
defaultdict(,{'11163722404385':[('3\n','2089','','Converted','Converted','UNATT','Mon Apr 22 13:32:00 PDT 2013','UNATT'),'1116372240485':
[太平洋时间4月22日星期一13:31:00
2013年,“‘无人值守’”、(“#3\n”、“2089”、“、”、“、”、“、”、“、”、“、”、”、“、”、”、“、”、”、“、”、”、”、”、“、”、”、“、”、”、”、”、“、”
2013年12月22日13时31分14秒,“无人值守”和(“#3\n”、“2089”、“已转换”和“,
“(2013年4月22日星期一13:32:00,无人值守”)]]
accounts=defaultdict(列表)
以open('C:\fileReport.txt','a')作为csvoutput:
writer=csv.writer(csvoutput)
对于sid,accounts.iteritems()中的数据1:
报表=[';'。为data1中的项联接(项)
打印报告
finalReport=['{},{}.格式(sid,'.join(报告))]
writer.writerow(报告)
writer.writerow(“\n”)

这有点混乱,而且您没有指定预期的输出。这就是我认为你想要做的:

代码:

from collections import defaultdict

accounts = defaultdict(list)
accounts['11163722404385'] = [('a', 'list'),('another', 'list')]
accounts['1116372240485'] = [('one', 'more')]

with open(r'C:\temp\out.txt', 'a') as writer:
    for k,v in accounts.iteritems():
        csv = ';'.join([','.join(t) for t in v])
        writer.write("%s,%s\n" % (k, csv))
11163722404385,a,list;another,list
1116372240485,one,more
输出:

from collections import defaultdict

accounts = defaultdict(list)
accounts['11163722404385'] = [('a', 'list'),('another', 'list')]
accounts['1116372240485'] = [('one', 'more')]

with open(r'C:\temp\out.txt', 'a') as writer:
    for k,v in accounts.iteritems():
        csv = ';'.join([','.join(t) for t in v])
        writer.write("%s,%s\n" % (k, csv))
11163722404385,a,list;another,list
1116372240485,one,more

您可能需要重新考虑数据结构。

听起来像是
pprint
的工作:

>>> from pprint import pprint
>>> pprint(accounts)
{'11163722404385': [('#3\n',
                     '2089',
                     '',
                     '',
                     '',
                     'Converted',
                     '',
                     '',
                     '',
                     'Mon Apr 22 13:32:00 PDT 2013',
                     'UNATT')],
 '1116372240485': [('#3\n',
                    '2089',
                    '',
                    '',
                    <etc.> ]}
>>从pprint导入pprint
>>>警察公共关系科(会计)
{'11163722404385':[('3\n',
'2089',
'',
'',
'',
“转换”,
'',
'',
'',
“2013年4月22日星期一13:32:00 PDT”,
“无人参与”)],
‘1116372240485’:[(‘3\n’,
'2089',
'',
'',
]}

缩进已损坏。由于这可能是一个错误,请修复它。如果您使用的是Windows,请尝试使用“\r\n”。谢谢。效果非常好。当您说我必须重新考虑数据结构时,您的意思是说defaultdict不是存储这样的值的好选项?