2013-04-21 55 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]