[英]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.