我目前正在编写一些从文本文件中读取行的代码。该行被分成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
你可以加入一些固体样品和预期产量吗? –