2024-09-30 22:26:23 发布
网友
必须有更好/更有效的方法来做到这一点。如果第一个字符串匹配,我想增加一个变量,如果第二个字符串匹配,我想增加第二个变量
ifCount = 0 elseCount = 0 for x in dict: if x["bla"] == 'this': ifCount += 1 elif x["bla"] == 'that': elseCount += 1
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
dict
d
只需使用计数器对象
from collections import Counter label_count = Counter(entry["bla"] for entry in d)
label_count现在包含d中所有"bla"项的计数,具体地说,是this和that项的计数。如果只需要多个元素中的两个元素,可以添加一个子句if entry["bla"] in ["this", "that"]
label_count
"bla"
this
that
if entry["bla"] in ["this", "that"]
就效率而言,您的代码没有问题。它很简洁,只需迭代一次。如果你想把它缩短一点,我们可以使用filter
filter
ifCount = len(filter(lambda x: x['bla'] == 'this', dict)) elseCount = len(filter(lambda x: x['bla'] == 'this', dict))
虽然篇幅较短,但它是否更具可读性仍有争议。这种语法在较大的代码库中可能有意义,因为lambda实际上是一些常用且众所周知的函数,但在这个单独的示例中,我认为for循环更具可读性
lambda
for
输出:
处理这一问题的“明显”方法是使用dict来计算发生的次数。首先,将现有iterable的名称从
dict
更改为可用的名称,比如说d
只需使用计数器对象
label_count
现在包含d
中所有"bla"
项的计数,具体地说,是this
和that
项的计数。如果只需要多个元素中的两个元素,可以添加一个子句if entry["bla"] in ["this", "that"]
就效率而言,您的代码没有问题。它很简洁,只需迭代一次。如果你想把它缩短一点,我们可以使用
filter
虽然篇幅较短,但它是否更具可读性仍有争议。这种语法在较大的代码库中可能有意义,因为
lambda
实际上是一些常用且众所周知的函数,但在这个单独的示例中,我认为for
循环更具可读性相关问题 更多 >
编程相关推荐