簡體   English   中英

創建Excel列值字典的Pythonic方法

[英]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中可以提供這樣的列表

每當我看到討厭的循環填充了dictlist ,我都會嘗試用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM