簡體   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