2013-04-21 52 views
1

内字典我有下面的代码:如何创建字典

datedict = defaultdict(set) 
with open('d:/info.csv', 'r') as csvfile: 
    filereader = csv.reader(csvfile, 'excel') 

    #passing the header 
    read_header = False 
    start_date=date(year=2009,month=1,day=1) 
    #print((seen_date - start_date).days) 
    tdic = {} 
    for row in filereader: 
     if not read_header: 
      read_header = True 
      continue 

# reading the rest rows 
     name,id,firstseen = row[0],row[1],row[3] 
     try: 
      seen_date = datetime.datetime.strptime(firstseen, '%d/%m/%Y').date()    
      deltadays = (seen_date-start_date).days 
      deltaweeks = deltadays/7 + 1 
      key = name +'-'+id 
      currentvalue = tdic.get(key, []) 
      currentvalue.append(deltaweeks) 
      tdic[key] = currentvalue 

     except ValueError: 
      print('Date value error') 
      pass 

tdic = dict((name, max(weeks) - min(weeks) + 1) for name, weeks in tdic.iteritems()) 

pprint.pprint(tdic) 

中,我得到以下结果:

{'Mali-2': 20, 
'Gooki-3': 6, 
'Piata-4': 6,  
'Goerge-5': 4, 
'Samoo-6': 1, 
'Marria-7': 2} 

现在我想编写和印刷三个项目,名称,ID和周作为Excel文件中的单独列。任何人都知道如何可能?

+0

请修复您的结果,它不是有效的python。 @ user2058811是你想要的结果吗?或者,你有什么?它仍然是无效的Python ... – jamylak 2013-04-21 10:07:11

+0

你说你想打印它们到一个excel文件,我的答案只是直接打印它们,这很好吗? – jamylak 2013-04-21 10:18:27

+0

这不是你原来的问题的一部分,我建议打开一个新的 – jamylak 2013-04-22 11:55:10

回答

3
>>> with open('out.csv', 'w') as f: 
     w = csv.writer(f) 
     for k, v in tdic.iteritems(): 
      name, id_ = k.split('-') 
      weeks = v 
      w.writerow([name, id_, weeks]) 


>>> with open('out.csv') as f: 
     print f.read() 


Piata,4,6  
Mali,2,20  
Goerge,5,4  
Gooki,3,6  
Samoo,6,1  
Marria,7,2 

然而,我不喜欢你这样做的方式,下面是您的代码的一些建议:

key = name +'-'+id 

而不是使用字符串操作来创建一个关键的,使用tuple

key = (name, id) 

改变这一行:

tdic = dict((name, max(weeks) - min(weeks) + 1) for name, weeks in tdic.iteritems()) 

,只是说

tdic = dict((key, max(weeks) - min(weeks) + 1) for key, weeks in tdic.iteritems()) 

,因为现在它的关键(name, id_)我们应该反映(这是一件小事但很重要)

然后上面的代码将只是

>>> with open('out.csv', 'w') as f: 
     w = csv.writer(f) 
     for (name, id_), weeks in tdic.iteritems(): 
      w.writerow([name, id_, weeks]) 
+0

@ user2058811 oops我的意思是'tdic.iteritems()'不是'd.iteritems()'。你也可以发布'print tdic'的输出 – jamylak 2013-04-21 10:25:30

+0

@ user2058811将文件扩展名改为'.csv',可以用excel打开 – jamylak 2013-04-21 10:31:42

+0

@ user2058811你是什么意思?什么是'.cvs'? – jamylak 2013-04-21 11:25:20

1

您可以定义字典的这样一个字典:

a_dict = {key: { anotherKey: value}} 

或者,如果字典已经存在:

a_dict[key] = {anotherkey: value} 
print a_dict[key][anotherkey]