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

Python 找到匹配的字符串,然后+;1到元素,python,arrays,list,loops,csv,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文件中提取姓名列表,然后

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


有什么办法让它工作吗?非常感谢

最突出的是这一行:

 nameList[1] = nameList[1] + 1
nameList[1]
是主列表中的第二个内部列表。我想你的意思可能是
姓名列表[x][1]

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


我认为您试图解决的最初问题是获得姓名的计数

如果是这样,那么使用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)

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

我刚刚编辑了我的代码来实现这一点,但是它返回了这个“TypeError:只能将列表(而不是“int”)连接到列表”,我觉得这可能与最初的版本类似?谢谢名单中到底包含什么?在我的测试中,我使用了
nameList=[['mike',0],'john',2],'henry',0],'sam',1]
,当我尝试建议的修复方法时,它起了作用。不管怎么说,尼索莫苷似乎为您提供了一种更简洁的获取所需数据的方法,我建议您使用它,而不是我建议的。您好,谢谢您的回复!我只是快速运行了一下,我只希望每次都能在函数中引入的特定名称中添加+1,而不是所有的名称。然而,你们给我看的这件伟大的事情,真的解决了一个完全不同的问题,而我正试图解决这个问题!谢谢。我已经添加了一些可能对你有帮助的信息。现在所有的信息都整理好了,谢谢你花时间来帮助我!很高兴为您服务。:)
with open("nameList2.csv", 'r') as f:
    rd2 = csv.reader(f)
    cnt.update(r[0] for r in rd2)