带try或if条件的Python词典?

2024-09-27 17:56:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的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?谢谢你的回复这是电子表格的名字


Tags: 文件字典abvaluexlskitbcbla
2条回答

看一看^{}——它允许您像普通一样使用字典,但是任何试图访问字典中不存在的键的尝试都会导致使用您指定的默认值创建该键

您可以将默认值设为float,默认值为0.0,因为float就是这样做的,或者您可以创建一个“magic”值并将其用作默认值:

kit = collections.defaultdict(float)

kit = collections.defaultdict(return_some_magic_value)

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

最基本的解决方案是存储所有未解析的内容,然后遍历单元格进行“深度优先”计算:如果一个单元格引用了另一个单元格,则先解析该单元格,然后再返回。您应该标记解析的单元格,这样迭代和递归就不会发生冲突。一个简单的方法可能是将它们放入一个单独的词典中进行评估。您甚至可以使用defaultdict,其中工厂函数实际上为您执行递归求值

一个简单的方法是:

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

相关问题 更多 >

    热门问题