Pythonic方法创建Excel列值的字典

时间:2017-10-12 19:42:44

标签: python excel dictionary openpyxl

我有一个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中有一些东西可以提供这样的列表

3 个答案:

答案 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)

请参阅documentation on defaultdict