2012-11-20 98 views
1
def reportCSV(t): 
    ret = '' 
    for ev in t: 
     for p in t[ev]: 
      for w in t[ev][p]: 
       ret += ','.join((ev, p, w, t[ev][p][w])) + '\n' 
    return ret 

什麼是更pythonic的方式來做到這一點,例如使用itertools或類似的?pythonic/itertools的方式來通過字典?

在這種情況下,我只是寫出一個CSV文件。 t是一個字典 T [EV]是一個字典 T [EV] [P]是一個字典 T [EV] [P] [W]是一個浮動

我不知道我怎麼樣d在這種情況下使用itertools.product。

+1

'itertools.product'可能是。 –

+3

'在ev.keys中()'和ev'在t中一樣' – mata

+1

我有點困惑,你的字典的結構是什麼? –

回答

4

什麼你都可以改寫爲:

def reportCSV(t): 
    result = [] 
    for t_key, t_value in t.iteritems(): 
     for p_key, p_value in t_value.iteritems(): 
      for w_key, w_value in p_value.iteritems(): 
       row_data = t_key, p_key, w_key, w_value 
       result.append(','.join(row_data)) 
    return '\n'.join(result) 

這將是更快,因爲它加入串在一起,而不是執行許多串連的和更有效的,因爲它使用iteritems()它不需要做任何額外的字典查找或創建中介列表。

+0

是的,在這種情況下,這將是正確的方法,但如果您多次執行此類處理,則提取(keyA,keyB,keyC,value)的幫助函數將很容易編寫並使代碼更加複雜可讀。如果你想擁有動態深度,那麼遞歸輔助函數將是必須的。 –