2017-03-01 100 views
1

這很難解釋。所以,我有一個文本文件,「People.txt」,包含以下內容:Python - 在字典中更改數組內元素的值

Jonathan,7, 
Laura,11, 
Bethany,21, 
Jonathan,8, 
Ashley,10, 
Jonathan,14, 
Rachel,10, 
Jonathan,5, 

我試圖做的是查找文件的具體名稱在比賽中,並且減去數與總共50個名稱對應。

此處重點在於Jonathan在文件中有多個條目。目前,我的代碼在文件中查找匹配,並從50中減去數字。問題是,它沒有考慮到第一個匹配已被「使用」。

(讓我們的名字被搜索的是喬納森)

name = "Jonathan" 
total = 50 

with open("People.txt","r") as file: 
    for line in file: 
     info = line.split(",") 
     if name == info[0]: 
      total -= info[1] 

我不知道這個例子實際工作中描繪的問題,因爲我發現它有點難以解釋的問題。所以也許只是忽略它/用它作爲我想要做的一般想法。

基本上我遇到的問題是我的真實代碼(這裏的代碼只是一個簡化的例子,因爲我不想在這裏發佈真實的東西)只考慮每次的第一場比賽。 但基本上,我如何確保程序每次都進入下一場比賽?也許這樣它會計算文件中有多少匹配,並且每次它從總數中減去時,在遍歷文件期間到達下一個匹配時繼續。

對不起,如果這沒有任何意義。不確定使用哪個示例代碼。謝謝你的幫助。

+0

你可以把你的所有定位名稱在一個單獨的文件,並宣讀其存儲在一組,迭代人行文件時只檢查該名稱是否在設定與否。順便說一句,當你減去它時,你必須將'info [1]'轉換爲整數 – haifzhan

回答

0

這很難回答,因爲你的代碼看起來很好,它應該在第一場比賽後繼續尋找,並減去所有比賽。但無論如何,這是另一個概念性解決方案:

如果您將文件讀取到字典中,則可以使用過濾器和減少來找到並減去匹配。

from functools import reduce 

name = "Jonathan" 
total = 50 

namelist = [] 

with open("People.txt","r") as file: 
    for line in file: 
     info = line.split(",") 
     namelist.append((info[0], int(info[1])) 

result = 50 - reduce(lambda x, y: x[1] + y[1], filter(lambda x: x[0] == name, namelist))