if..increment变量else..increment不同的变量

2024-09-30 22:26:23 发布

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

必须有更好/更有效的方法来做到这一点。如果第一个字符串匹配,我想增加一个变量,如果第二个字符串匹配,我想增加第二个变量

ifCount = 0
elseCount = 0
for x in dict:
    if x["bla"] == 'this':
        ifCount += 1
    elif x["bla"] == 'that':
        elseCount += 1

Tags: 方法字符串inforifthatthisdict
3条回答
from collections import Counter
from operator import itemgetter

items = [
    {"bla": "this"},
    {"bla": "this"},
    {"bla": "that"},
    {"bla": "that"},
    {"bla": "that"},
    {"bla": "that"},
    {"bla": "this"},
    {"bla": "that"}
]

counter = Counter(map(itemgetter("bla"), items))

print(counter["this"])
print(counter["that"])

输出:

3
5
>>> 

处理这一问题的“明显”方法是使用dict来计算发生的次数。首先,将现有iterable的名称从dict更改为可用的名称,比如说d

只需使用计数器对象

from collections import Counter
label_count = Counter(entry["bla"] for entry in d)

label_count现在包含d中所有"bla"项的计数,具体地说,是thisthat项的计数。如果只需要多个元素中的两个元素,可以添加一个子句if entry["bla"] in ["this", "that"]

就效率而言,您的代码没有问题。它很简洁,只需迭代一次。如果你想把它缩短一点,我们可以使用filter

ifCount = len(filter(lambda x: x['bla'] == 'this', dict))
elseCount = len(filter(lambda x: x['bla'] == 'this', dict))

虽然篇幅较短,但它是否更具可读性仍有争议。这种语法在较大的代码库中可能有意义,因为lambda实际上是一些常用且众所周知的函数,但在这个单独的示例中,我认为for循环更具可读性

相关问题 更多 >