我有一个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)
这项工作,...但我相信有一种更有效的方法来创建这个dict与if .. else逻辑
有更好的方法吗?也许openpyxl中有一些东西可以提供这样的列表
答案 0 :(得分:6)
每当我看到一个难看的循环填充capthick=
或dict
时,我会尝试用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)
开头,我们可以避免使用所有.value
代码:
sheet.values
答案 1 :(得分:1)
您可以替换:
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])
如果键在词典中,则返回其值。如果不是,请插入值为default的值并返回default。默认默认为无。
请参阅docs。
答案 2 :(得分:1)
from collections import defaultdict
cbyc = defaultdict(list)
for cell in all_cells:
if cell.value is None:
continue
cbyc[cell.column].append(cell.value)