2016-12-29 6 views
0

Я импортирую данные из CSV и помещаю их в вложенные dicts. Мой текущий ключ проверка выглядит следующим образом:Loop create inested dicts

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 '], 'действительный синтаксис 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 это хорошо. Если у dict нет значения для указанного вами ключа, он создает для вас новый.

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

Спасибо, это работает, и ваш отредактированный ответ лучше, чем первый. – Pythonist