【问题标题】:Python- how to compare values that change with each iteration of loop on dictionary?Python-如何比较随着字典上循环的每次迭代而变化的值?
【发布时间】:2017-04-20 14:57:07
【问题描述】:

给定一个字典(db)和字符串(类型),我的函数需要搜索整个字典并找到所有以字符串(类型)为唯一类型的项目,找到所有类型为 1/2 的项目它们的类型,并将两个值相加。然后它必须返回统计数据的元组。

我不知道如何跟踪计数器,并且函数返回不正确的元组。我认为我的结构可能是健全的,但我知道它不能正常工作。我怎样才能解决这个问题?什么可以帮助我跟踪柜台? if 语句检查不正确是我的问题吗?

这是我当前的代码:

def count_by_type(db,type):
    only_type=0
    half_type=0
    for key, values in db.item():
        if type in values[1] or values[2]:
            half_type+=1
        if type in (values[1] or values[2]) and (values[1] or values[2]==None:)
            only_type+=1
    my_sum=half_type+ only_type
    return (only_type, half_type, my_sum)

这是预期输入/输出的示例:

db={'bulb':(1,'Grass','poison', 1, False), 
    'Char':(4, 'poison','none', 1, False)}

types='poison'

'char' has poison as its only type, only_type+=1
'bulb' has poison as 1/2 of its types, half_type +=1
my_sum=2
return: (1,1,2)

【问题讨论】:

  • for key, values in db.item(): 那不可能。这是items()
  • 还有if type in values[1] or values[2]::你不想写那个。这可能是你的问题:if type in values[1] or type in values[2]:
  • 我将值写为 or 因为没有一个可能是其中一种类型,但它也可能不是,我不知道如何检查它。 @Jean-FrançoisFabre
  • 不是一个解决方案,但值得一提的是,使用切片进行比较,将inor 配对使用会更有意义并节省一些宽度
  • 切片如何?我理解 in 和 or,但我应该如何切片呢?

标签: python python-3.x dictionary counter


【解决方案1】:

您的代码中存在一些语法问题,导致逻辑无法按预期进行计算。这是更正的代码。

代码:

def count_by_type(the_db, the_type):
    only_type = 0
    half_type = 0
    for values in the_db.values():
        if the_type in (values[1], values[2]):
            if None in (values[1], values[2]):
                only_type += 1
            else:
                half_type += 1

    return only_type, half_type, half_type + only_type

测试代码:

db = {
    'bulb': (1,'Grass', 'poison', 1, False),
    'Char': (4, 'poison', None, 1, False)
}

print(count_by_type(db, 'poison'))

结果:

(1, 1, 2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 2016-10-01
    • 1970-01-01
    • 2011-08-16
    • 2012-03-04
    • 2020-01-05
    相关资源
    最近更新 更多