Unexpected Data Assignment in Python Nested Dictionaries
我对python不熟悉,所以请原谅我犯了一些愚蠢的错误,但是经过研究,我还是搞不清楚。我正在根据日历中的月份天数列表创建字典。我最初使用的是
我的问题是,我循环中的最后一条语句是指派同一个人每天做垃圾(等),即使循环只是在第一天。我认为我如何启动字典有问题,因为它给所有的DIC赋值,就好像它们是一样的。
基本上,我和上面的链接问题有相同的问题,但是使用嵌套字典。如果我需要澄清什么,请告诉我。谢谢您!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import calendar week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] taskDic = {'Trash':[], 'Groceries':[], 'Clean':[]} teamList = ['Jane', 'Peter', 'Jake', 'Eliza', 'Sarah', 'Bill'] person = 0 cal = list(calendar.Calendar().itermonthdays(2015, 8)) cal = {k: {} for k in cal} for i in cal: cal[i] = {week[i % 7]: taskDic} for i in cal: if (cal[i].keys() != 'Saturday') and (cal[i].keys() != 'Sunday'): for j in cal[i]: for k in cal[i][j]: cal[i][j][k] = teamList[person % len(teamList)] person += 1 |
我的结果如下:
1 2 3 4 5 | 0 {'Monday': {'Trash': 'Eliza', 'Groceries': 'Sarah', 'Clean': 'Bill'}} 1 {'Tuesday': {'Trash': 'Eliza', 'Groceries': 'Sarah', 'Clean': 'Bill'}} 2 {'Wednesday': {'Trash': 'Eliza', 'Groceries': 'Sarah', 'Clean': 'Bill'}} 3 {'Thursday': {'Trash': 'Eliza', 'Groceries': 'Sarah', 'Clean': 'Bill'}} etc... |
号
问题在于:
1 2 | for i in cal: cal[i] = {week[i % 7]: taskDic} |
你每天都用同一份
正如@jojonas所评论的,修复方法如下:
1 | cal[i] = {week[i % 7]: taskDic.copy()} |
号
唯一的问题是,您最终将创建一组未使用的副本,这对于这个任务来说是很好的。
你想做的是:
1 2 | week_of_tasks = [taskDic.copy() for _ in week] cal[i] = {week[i % 7]: week_of_tasks[i % 7]} |