繁体   English   中英

找到匹配的字符串,然后+ 1到元素

[英]Find a matching string and then + 1 to element

我正在尝试创建循环以通过二维列表,如果循环找到第一个元素中的匹配字符串,则它将+1添加到列表的第二个元素。

列表的一个例子:

[[mike, 0], [john, 2], [henry, 0], [sam, 1]]

如果所需的搜索是针对John,则会发生这种情况:

[[mike, 0], [john, 3], [henry, 0], [sam, 1]]

然后迈克:

[[mike, 1], [john, 3], [henry, 0], [sam, 1]]

在下面的场景中,'name'是需要找到的字符串。

我还从CSV文件中提取名称列表,然后再写回更新的列表。

我似乎无法让这个工作,并且回到我身上的错误是

'TypeError:int()参数必须是字符串,类似字节的对象或数字,而不是'list''

def count(name):
    with open('nameList.csv', 'r') as csvfile:
        reader = csv.reader(csvfile)
        nameList = list(reader)
    for x in range(len(nameList)):
        if nameList[x][0] == name:
            print(nameList== name)
            nameList[1] = nameList[1] + 1
    with open("nameList.csv", "w", newline='') as f:
        writer = csv.writer(f)
        for i in nameList:
            writer.writerow(i)

关于如何使这个工作的任何想法? 非常感激!


我相信你要解决的原始问题是得到名字的数量。

如果是这种情况,那么使用Python的collections模块中的Counter可以更轻松地完成它。

from collections import Counter

cnt = Counter()
with open("nameList.csv", 'r') as f:
    rd = csv.reader(f)
    cnt = Counter(r[0] for r in rd)

print(cnt)


cnt将是类似dict的对象(您可以像任何其他字典一样使用它),其中键是CSV中的名称,值是计数。 所以,它可能看起来像这样:

{'john': 3, 'mike': 1, 'sam': 1}


现在假设您有另一个带有名称的CSV,并且您希望在两个文件中找到每个名称的计数。 您可以通过更新cnt轻松完成此操作:

with open("nameList2.csv", 'r') as f:
    rd2 = csv.reader(f)
    cnt.update(r[0] for r in rd2)

您避免从头开始计数,并且代码的方式更性感! 简单而优雅!

突出的一点是这一行:

 nameList[1] = nameList[1] + 1

nameList[1]是主列表中的第二个内部列表。 我想你可能意味着nameList[x][1]

nameList[x][1] = nameList[x][1] + 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM