2016-12-29 106 views
0

我从CSV导入数据并将其置于嵌套字典中。 我现在的重点检查看起来是这样的:循环创建嵌套字典

data = {} 
[...] 
if day not in data: 
    data[day] = {} 
if hour not in data[day]: 
    data[day][hour] = {} 
if user in data[day][hour]: 
    worked_time += (
     data[day][hour][user]['worked_time'] 
    ) 
data[day][hour][user] = { 
    'name': users[user]['name'], 
    'worked_time': worked_time 
} 

它们可以是几个用户为各data[day][hour]
在想,如果有检查是否存在每个key不是用几个ifs更好的办法。

+0

我不认为'name':[users] [user] ['name'],'是有效的Python语法。但'collections.defaultdict'或'dict.setdefault'可能是替代这些'if xxx not in yyy'语句的好选择。 – MSeifert

+0

这应该回答你的问题:https://stackoverflow.com/questions/19189274/defaultdict-of-defaultdict-nested#19189356 –

+0

你是对的先生,这是我的拼写错误,应该是'users [user] ['name] '。将检查链接的答案,谢谢。 – Pythonist

回答

-2

collections.defaultdict很好。如果一个字典没有你指定的键的值,它会为你创建一个新的字典。

from collections import defaultdict 
data = defaultdict(lambda: defaultdict(lambda: defaultdict(dict))) 
data['day']['hour']['user']['worked_time'] = 2 
+0

谢谢你,它的工作原理,你编辑的答案比第一个更好。 – Pythonist