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

时间:2018-02-17 15:57:06

标签: python arrays list loops csv

我正在尝试创建循环来遍历二维列表,如果循环找到第一个元素中的匹配字符串,那么它会将+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)

有关如何使这项工作的任何想法?非常感谢!

2 个答案:

答案 0 :(得分:3)


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

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

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)

你避免从头开始计算代码更性感!简单而优雅!

答案 1 :(得分:0)

突出的一点是这一行:

 nameList[1] = nameList[1] + 1

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

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