【发布时间】:2020-05-30 16:47:01
【问题描述】:
我有三个列表,每个列表都包含员工的唯一 ID。例如,
bug = [1,2,3,4,4,4,4,4,5,6,7,8,8,8]
task = [1,1,1,1,2,9]
subtask = [10, 11, 11, 11, 8, 8, 8, 8 ,8 , 8, 6]
员工ID的参考次数显示,员工解决了多少问题。例如,ID=1 的员工解决了 1 个 bug、4 个任务和 0 个子任务。我想创建一个字典,它具有下一个结构:键是员工的 ID,值是大小为 3 的列表,列表的每个值显示有多少错误、任务和子任务员工 ID = 已解决。例如,就我而言,我必须获取下一个字典:
all_employees = {1:[1, 4, 0], 2:[1, 1, 0], 3:[1, 0, 0], 4:[5, 0, 0], 5:[1, 0, 0], 6:[1, 0, 1], \
7:[1, 0, 1], 8:[3, 0, 6], 9:[0, 1, 0], 10:[0, 0, 1], 11:[0, 0, 3]}
这是我的代码:
from collections import defaultdict, Counter
bug = [1,2,3,4,4,4,4,4,5,6,7,8,8,8]
task = [1,1,1,1,2,9]
subtask = [10, 11, 11, 11, 8, 8, 8, 8 ,8 , 8, 6]
all_issues = bug + task + subtask
all_emlpoyees = dict.fromkeys(all_issues, [0, 0, 0])
bug_d = dict(Counter(bug))
task_d = dict(Counter(task))
subtask_d = dict(Counter(subtask))
for i in all_employees.keys():
try:
print("value = ", bug_d[i])
print ("key = ", i)
all_employees[i][0] = bug_d[i]
except Exception as e:
pass
print (all_assignees)
在我看来,这段代码应该产生与上面提到的相同的字典,但它的列表中只有一个,第一个,非零值,但我的输出看起来像:
{1: [3, 0, 0], 2: [3, 0, 0], 3: [3, 0, 0], 4: [3, 0, 0], 5: [3, 0, 0], 6: [3, 0, 0], 7: [3, 0, 0], 8: [3, 0, 0], 9: [3, 0, 0], 10: [3, 0, 0], 11: [3, 0, 0]}
尽管 for 循环中的两次打印显示了正确的值。 任何想法,我做错了什么?
感谢帮助,问题已解决。
【问题讨论】:
-
你只设置了
all_employees[i][0]- 你从来没有设置all_employees[i][1]=task_d[i]orall_employees[i][2] = subtask_d[i] -
你为什么要
except Exception as e: pass??dict(Counter(bug))的目的是什么?collections.Counter不是 dict 的子类吗?
标签: python list dictionary for-loop