[英]Pythonic way to create a dict of Excel column values
我有一個Excel工作表,我想創建一個dict,它具有單元格值作為列表,單元格列為鍵。 假設電子表格中的數據看起來像
A B C (columns)
1 2
3 4
5 f
我想要一個看起來像的字典,
cbyc = {'A': [1,3,5]; 'B':[2,4,f]; 'C';[None, None, None]}
我正在使用以下代碼進行此操作
import openpyxl as oxl
wb = oxl.load_workbook('myxlworkbook.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
allcells = sheet.get_cell_collection()
cbyc = {}
for c in allcells:
if c.value is not None:
if c.column not in cbyc.keys():
cbyc[c.column] = [c.value]
else:
cbyc[c.column].append(c.value)
這項工作,..但我確信,使用if .. else邏輯可以更有效地創建此字典
有沒有更好的辦法? 也許在openpyxl中可以提供這樣的列表
每當我看到討厭的循環填充了dict
或list
,我都會嘗試用dict理解或list理解替換它。 在這種情況下,我會同時使用。
該程序可能會執行您想要的操作:
import openpyxl as oxl
wb = oxl.load_workbook('myxlworkbook.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
cybc = {
col[0].value: [cell.value for cell in col[1:]]
for col in sheet.columns
}
print(cybc)
但是,如果我們調用sheet.values
以以下內容開頭,則可以避免所有.value
代碼:
cybc = { col[0]: col[1:] for col in zip(*sheet.values) }
您可以替換:
if c.column not in cbyc.keys():
cbyc[c.column] = [c.value]
else:
cbyc[c.column].append(c.value)
與:
cby.setdefault(c.column, []).append(c.value)
setdefault(key[, default])
如果key在字典中,則返回其值。 如果不是,請插入具有默認值的密鑰,然后返回默認值。 默認默認為無。
參見docs 。
from collections import defaultdict
cbyc = defaultdict(list)
for cell in all_cells:
if cell.value is None:
continue
cbyc[cell.column].append(cell.value)
請參閱有關defaultdict
文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.