带try或if条件的Python字典?

带try或if条件的Python字典?,python,dictionary,xls,Python,Dictionary,Xls,我有这样的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是否存在

我有这样的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是否存在,是否没有非类型,如果存在,则输入0?谢谢你的回复。”Kit'-这是电子表格的名称

一种基本方法:

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编写的。

一种基本方法:

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编写的。

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

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

kit = collections.defaultdict(float)

kit = collections.defaultdict(return_some_magic_value)
但是,如果您确实在尝试实现电子表格,我建议您考虑如何处理引用其他单元格的单元格周期。这不是一个完全无关紧要的问题,这个问题的答案将告诉你如何储存你的细胞

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

看一看-它让您可以像普通一样使用字典,但是任何访问字典中不存在的键的尝试都会导致使用您指定的默认值创建该键

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

kit = collections.defaultdict(float)

kit = collections.defaultdict(return_some_magic_value)
但是,如果您确实在尝试实现电子表格,我建议您考虑如何处理引用其他单元格的单元格周期。这不是一个完全无关紧要的问题,这个问题的答案将告诉你如何储存你的细胞


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

需要更多关于您的逻辑的信息。。
kit['1A']
kit['a8']
kit['2A']
kit['a9']
之间的关系是什么,所以我确信有一种方法,但首先把MVCE放在这里。不清楚
kit
自引用在代码中应该如何工作。请提供一个。对不起,我的错误。1A和a8之间没有关系。1A、2A。。。是随机名称,单元格没有结构化。需要有关逻辑的详细信息。。
kit['1A']
kit['a8']
kit['2A']
kit['a9']
之间的关系是什么,所以我确信有一种方法,但首先把MVCE放在这里。不清楚
kit
自引用在代码中应该如何工作。请提供一个。对不起,我的错误。1A和a8之间没有关系。1A、2A。。。是随机名称,并且单元格没有结构化。