我目前正在編寫一些從文本文件中讀取行的代碼。該行被分成3個不同的段,第一段是用戶ID。修改列表中包含的字典
例如,一條線是這樣的:
11 490 5
我有因爲有用戶一樣多的元素,其中每個元素與用戶對應的第五用戶(例如exampleList[4]
存儲數據的列表)。
每個列表元素包含一個不確定長度的字典,其中鍵是該行的第二個段,該值是該行的第三個段。
如果在另一行中出現相同的用戶ID,字典的長度(鍵值對的數量)會增加。這個想法是,當遇到具有相同用戶ID的另一行時,來自該行的數據被附加到對應於該用戶的列表元素的字典中。
例如,上述線路將被存儲在這樣的:
exampleList[10] = {490:5}
,如果程序讀取另一行是這樣的:11 23 9
列表項將自動更新到這一點:
exampleList[10] = {490:5, 23:9}
我的程序工作的方式是,它首先收集用戶數量,然後創建一個像這樣的列表:
exampleList = [{}] * numberOfUsers
然後使用re.finditer
提取行中的空白位置,然後通過基本字符串操作提取數字。
該部分完美工作,但我不確定如何更新列表中的字典,即將新的鍵值對添加到字典中。
我讀過關於使用for循環here,但這不適用於我,因爲它將它添加到單元格中的每個字典中,而不是僅將它附加到某個單元格中的字典中。
示例代碼:
oFile = open("file.txt", encoding = "ISO-8859-1")
text = oFile.readlines()
cL = [{}] * numOfUsers #imported from another method
for line in text:
a = [m.start() for m in re.finditer('\t', line)]
userID = int(line[0:a[0]])
uIDIndex = userID - 1
cL[uIDIndex].update({int(line[a[0]+1:a[1]]):int(line[a[1]+1:a[2]])})
print(cL)
file.txt:
1 242 3
3 302 3
5 333 10
1 666 9
expected output:
[{242:3 , 666:9},{},{302:3},{},{333:10}]
actual output:
[{242: 3, 333: 10, 302: 3, 666: 9}, {242: 3, 333: 10, 302: 3, 666: 9}, {242: 3, 333: 10, 302: 3, 666: 9}, {242: 3, 333: 10, 302: 3, 666: 9}, {242: 3, 333: 10, 302: 3, 666: 9}]
出於某種原因,它填充與所有值的列表中的所有詞典。
請您分享一些您的代碼。 –
如果你想要一個字典列表,你爲什麼要創建一個列表清單? – TessellatingHeckler
你可以加入一些固體樣品和預期產量嗎? –