Python字典有try或if条件吗?

问题描述 投票:0回答:2

我有像这样的python字典:

bla = {
    "ab_1A": str(round(kit['a8'].value,2)),
    "bc_2A": str(round(kit['a14'].value,2)),
    "ca3_A": str(round(kit['a35'].value,2)),
    "4A_1": str(round(kit['a51'].value,2)),
    ....
}

我从.xls文件中读取单元格。有没有什么好主意检查是否例如。 a8存在且没有NoneType,如果是,则输入0?感谢任何respo。 'Kit' - 这是电子表格的名称

python dictionary xls
2个回答
1
投票

看看collections.defaultdict - 它让你使用正常的字典,但是任何尝试访问不在字典中的键都会导致使用你指定的默认值创建该键。

您可以将默认值设置为浮点数,默认值为0.0,因为这是浮点数的作用,或者您可以创建“魔术”值并将其用作默认值:

kit = collections.defaultdict(float)

kit = collections.defaultdict(return_some_magic_value)

但是,如果您实际上是在尝试实现电子表格,我建议您考虑如何处理引用其他单元格的单元格循环。这不是一个完全无关紧要的问题,这个问题的答案将告知你如何存储你的细胞。

最基本的解决方案是存储未解决的所有内容,然后迭代执行“深度优先”评估的单元格:如果单元格引用另一个单元格,请解决该单元格然后返回。您可以在执行单元时标记单元格,以便迭代和递归不会发生冲突。一种简单的方法可能是将它们评估为单独的字典。您甚至可以使用defaultdict,其中工厂函数实际上为您进行递归评估!


1
投票

一种原始的方法:

def default_cell(xl_obj, cell, default_val):
    try: 
        return str(round(xl_obj[cell].value,2))
    except: #best if you can narrow down the exception...
        return default_val

kit = {
    "1A": default_cell('a8', "0.00"),
    "2A": default_cell('a9', "0.00"),
    ....
}

它是Python中的easier to ask for forgiveness than permission

© www.soinside.com 2019 - 2024. All rights reserved.