在文件中重复键和值的数字时出现问题



我必须返回每个人已解决任务的数量。 键 - ID 号,值 - 任务数

1, 2
1, 2
1, 3
2, 2,
2, 7

正确输出:

{1:2, 2:2}

而且我只有{1:2,2:1},因为以下代码忽略了2,2。 如何解决? 法典:

d = {}
with open(filename) as file:
for i in file:
for line in file:
i = list(map(int, line.split(',')))
if i[1] not in d:
if i[0] not in d:
d[i[0]] = 1
else:
d[i[0]] += 1
print(d)

这个任务有两个部分 - 首先我们需要忽略重复的对,比如出现两次的(1, 2),然后我们需要计算每个人出现的元组数量。我们可以使用集合求解第一部分,使用计数器求解第二部分。

from collections import Counter
with open(filename) as file:
pairs = { tuple(map(int, line.split(',')[:2])) for line in file }
d = Counter(person for person, _ in pairs)

原始代码给出错误结果的原因是,它只测试任务是否已被计算在内;它忽略了(2, 2),因为任务 2 已经被计入人员 1。我们应该只忽略人员和任务都重复的真正重复项,而不仅仅是重复任务时。

其他一些细节:你的原始代码在文件中的行上有两个嵌套循环,这是不必要的;如果某行中有一个额外的逗号,[:2]会去掉任何空字符串;并且这些对必须是元组,而不是列表,以便它们可以存储在一个集合中。

因为包含2,2的行以逗号结尾。这会导致line.split()在尝试将空字符串转换为int时返回错误的结果。删除后,列表具有正确的长度,并返回预期结果。

最新更新