我有一個Excel CSV文件,其中包含員工記錄。事情是這樣的:Excel CSV嵌入字典;列表解析
mail,first_name,surname,employee_id,manager_id,telephone_number
[email protected],john,smith,503422,503423,+65(2)3423-2433
[email protected],george,brown,503097,503098,+65(2)3423-9782
....
我使用DictReader把這個變成一個嵌套的字典:
import csv
gd_extract = csv.DictReader(open('filename 20100331 original.csv'), dialect='excel')
employees = dict([(row['employee_id'], row) for row in gp_extract])
是做正確的方式上面 - 它的工作,但它是正確的辦法?更高效的東西?另外,有趣的是,在IDLE中,如果我試圖在shell中打印「employees」,似乎會導致IDLE崩潰(大約有1051行)。
2.從內部字典
第二個問題的問題刪除EMPLOYEE_ID,我把它變成按employee_id索引的字典,以該值爲所有值的嵌套字典 - 然而,EMPLOYEE_ID是還有一個關鍵:嵌套字典中的值,這有點多餘?有沒有辦法將它從內部字典中排除?
3.在修真操縱數據
第三,我們需要做一些操作,以導入的數據 - 例如,所有的電話號碼都在錯誤的格式,所以我們需要做一些正則表達式那裏。另外,我們需要將manager_id轉換爲實際經理的姓名和他們的電子郵件地址。大多數經理都在同一個文件中,而其他人在外部合同CSV中,這是相似的,但格式不盡相同 - 我可以將其導入到單獨的字典中。
這兩個項目可以在單個列表理解中完成,還是應該使用for循環?或者多重理解是否奏效? (示例代碼在這裏真的很棒)。或者Python有更聰明的方法嗎?
乾杯, 維克多
部屋, @xyld:感謝您的詳細答覆=)。 1.根據我所告知的,employee_id保證是唯一的。但是,僅供參考,處理此問題的推薦方法是什麼?例外? (這裏的任何示例代碼都很棒)。 2.足夠公平,如果它只是一些額外的記憶,那麼我認爲它不是什麼大事。我只是認爲在Python中可能有一種聰明的方式將其從內部字典中排除。 – victorhooi 2010-05-14 03:48:18
3.嗯,是的,你是對的,不成熟的優化是所有邪惡的根源,所有*咧嘴*。是的,這只是線性的,所以我相信它會沒事的。儘管如此,我還是試圖讓自己的頭腦理解,有沒有辦法用一個在telephone_number上做一個正則表達式替換,以及經理的查找? – victorhooi 2010-05-14 03:48:46
@victorhooi你對我認爲的列表理解太掛了。只需使用for循環。清單理解應該自然地出現在代碼中,使其看起來更清晰,而不僅僅是**有趣**。國際海事組織 – dlamotte 2010-05-14 12:43:06