修改列表中包含的字典

时间:2016-05-18 03:36:47

标签: python list dictionary

我目前正在编写一些从文本文件中读取行的代码。该行分为3个不同的段,第一段是用户ID。

例如,一行看起来像这样:

exampleList[4]

我有一个列表,其中包含与用户一样多的元素,其中每个元素与用户对应(例如exampleList[10] = {490:5} 存储第5个用户的数据)。

每个列表元素包含一个不定长度的字典,其中键是该行的第二个段,该值是该行的第三个段。

如果在另一行中出现相同用户的ID,则字典的长度(键值对的数量)会增加。这个想法是当遇到具有相同用户ID的另一行时,来自该行的数据被附加到与该用户对应的列表元素中的字典。

例如,上面的行将存储在以下内容中:

11 23 9

如果程序读取另一行,请执行以下操作:exampleList[10] = {490:5, 23:9}

列表项会自行更新为:

exampleList = [{}] * numberOfUsers

我的程序的工作方式是首先收集用户数,然后创建一个这样的列表:

re.finditer

然后使用 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}] 提取行中的空格位置,然后通过基本字符串操作提取数字。

该部分工作正常,但我不确定如何更新列表中的字典,即将新的键值对附加到字典中。

我读过关于使用for循环here的内容,但这对我不起作用,因为它将它添加到单元格中的每个字典,而不是仅将其附加到特定单元格中的字典。

示例代码:

DROP TABLE IF EXISTS `test_table`;
CREATE TABLE `test_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 NOT NULL,
  `start` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  `end` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
);
INSERT INTO `test_table` VALUES ('2', 'test 1', '2016-01-01 12:00:00', '2016-01-01 13:00:00');
INSERT INTO `test_table` VALUES ('3', 'test 1', '2016-01-02 11:00:00', '2016-01-02 12:00:00');
INSERT INTO `test_table` VALUES ('5', 'test 1', '2016-01-03 15:00:00', '2016-01-03 16:00:00');
INSERT INTO `test_table` VALUES ('6', 'test 2', '2016-01-01 10:00:00', '2016-01-01 11:00:00');
INSERT INTO `test_table` VALUES ('7', 'test 2', '2016-01-02 17:00:00', '2016-01-02 18:00:00');

出于某种原因,它会使用所有值填充列表中的所有字典。

2 个答案:

答案 0 :(得分:0)

您只需通过索引访问字典即可。这是一个简单的例子:

    >>> A = []
    >>> A.append(dict())
    >>> A.append(dict())
    >>> A[0][5] = 7
    >>> A
    [{5: 7}, {}]
    >>> A[1][4] = 8
    >>> A[0][3] = 9
    >>> A[1][8] = 10
    >>> A
    [{3: 9, 5: 7}, {8: 10, 4: 8}]

答案 1 :(得分:0)

我不是肯定的我正确理解你的问题,但我能够得到你想要的输出。 请注意,此解决方案完全忽略列表中的第四个值

sampler.setHeaderManager(new HeaderManager())