どのようにコードを変更して1つのループだけを使うことができますか?私は...など.iteritems()、iterkeys()を使用しようPython - 多次元辞書をループするためのより良い方法
for user in data:
for item in data[user]:
start = seconds_since_midnight(
data[user][item]['start']
)
end = seconds_since_midnight(
data[user][item]['end']
)
overtime = end - start
if overtime > eight_hours:
if user not in result:
if str(user) not in names.keys():
continue
result[user] = {
'name': names[str(user)]['name'],
'overtime': []
}
result[user]['overtime'].append(overtime - eight_hours)
try:
result[user]['overtime'] = sum(result[user]['overtime'])
except KeyError:
pass
return sorted(
result.items(),
key=lambda result: result[1]['overtime'],
reverse=True
)
それは、このような構造を作成します。 データ= { 'のuser_id':{ datetime.date(2013、10、 1):{ 'start':datetime.time(9,0,0)、 'end':datetime.time(17,30,0)、 }、 datetime.date(2013、10、2) :{ 'start':datetime.time(8,30,0)、 'end':datetime.time(16,45,0)、 }、 } }
を行う機能
を紹介します。私が知る限り、あなたはすべての要素に一度アクセスします。したがって、並列スレッド/プロセスで作業を実行する予定がない限り、1つのループのみを使用することでほとんど利益が得られません。 – JohanL質問者は、「フラットが入れ子に比べて優れている」という事実によって動機づけられるかもしれません。 (Zen of Python) –