使用字典替换多 if 语句时计数错误

Posted

技术标签:

【中文标题】使用字典替换多 if 语句时计数错误【英文标题】:Wrong counting while using dictionary replacing multi-if statement 【发布时间】:2016-09-23 21:08:21 【问题描述】:

我的目标是在 Excel 中计算对指定公司的报价。

我之前使用了大量的 if 语句来进行计数工作。 如下代码

ipl=gs=gt=0
for file in glob.glob('*.xlsm'):
    wb=load_workbook(file,data_only=True)
    ws=wb["Tim"]
    client=ws['B2'].value

    if client=='Injection Parts Ltd.':
        ipl+=1
    if client=='Gulf Sample Ltd':
        gs+=1
    if client=='Great test Ltd.':
        gt+=1

以上工作。

考虑到if语句有20多条,而且需要很长时间才能完成检查,所以我使用了如下字典

ipl=gs=gt=0
for file in glob.glob('*.xlsm'):
    wb=load_workbook(file,data_only=True)
    ws=wb["Tim"]
    client=ws['B2'].value

companypool = 'Injection Parts Ltd.':ipl,
            'Gulf Sample Ltd':gs,
            'Great test Ltd.':gt

if client in companypool:
    print(companypool[client])
    print(client)
    companypool[client]+=1

结果是companypool[client]一直为0,计数失败。

代码有错吗?

我是 Python 新手,提前谢谢你。

【问题讨论】:

【参考方案1】:

你的缩进是否正确?以

开头的块
if client in companypool:

看起来没有正确缩进。还有那行

companypool = 'Injection Parts Ltd.':ipl,
    'Gulf Sample Ltd':gs,
    'Great test Ltd.':gt

每次迭代都会将您的字典值重置为 0。将其移至脚本的开头。

总的来说,它看起来像你想要的:

companypool = 
    'Injection Parts Ltd.': 0,
    'Gulf Sample Ltd': 0,
    'Great test Ltd.': 0,


for file in glob.glob('*.xlsm'):
    wb = load_workbook(file, data_only=True)
    ws = wb["Tim"]
    client = ws['B2'].value

    if client in companypool:
        print(companypool[client])
        print(client)
        companypool[client] += 1

ipl = companypool['Injection Parts Ltd.']
gs  = companypool['Gulf Sample Ltd']
gt  = companypool['Great test Ltd.']

【讨论】:

嗨 101,感谢您的及时回复。缩进问题是由paste.sorry引起的。你的第二个建议解决了我的问题一半。它确实将我的字典值重置为0每次迭代。实际上我仍然需要ipl,gs,gt作为变量,因为我必须将这些变量输入到excel的单元格中.如果我将它们定义为零,我很难在以后的代码中控制它们。我保留了它们,但发现 ipl,gs,gt 始终为 0 而不是 companypool[client] 的值。 我已经在最后添加了变量,希望对您有所帮助。 太棒了。它成功了!谢谢。我发现结果是一样的。(multi-if & dictionary 方法)。我看到了下面的帖子,但似乎没有提高性能。***.com/questions/17166074/…

以上是关于使用字典替换多 if 语句时计数错误的主要内容,如果未能解决你的问题,请参考以下文章

AWS CodeBuild buildspec bash 语法错误:用 if 语句替换错误

如何替换字典的 IF 语句? (C#,Linq)

带有while语句范围catch的if语句中的C ++错误

为啥字典查找会导致“不可散列类型”错误,但使用直接值不会?

Excel UDF IF 语句 <> 字符串引发 #Value 错误

SSI IF 语句错误