2016-10-19 50 views
0

我有一个defaultdict,我想创建一个字典作为值的一部分,我可以追加到这个字典吗?目前我正在追加一份名单,这意味着词典是分开的。追加到默认字典中的字典

dates = [datetime.date(2016, 10, 17), datetime.date(2016, 10, 18), datetime.date(2016, 10, 19), datetime.date(2016, 10, 20), datetime.date(2016, 10, 21), datetime.date(2016, 10, 22), datetime.date(2016, 10, 23)] 

e = defaultdict(list) 
for key, value in d.iteritems(): 
    value = (sorted(value, key=itemgetter('date'), reverse=False)) 
    for date in dates: 
     for i in value: 
      if i['date'] == str(date) and i['time'] == 'morning': 
       value1 = float(i['value1']) 
       temp = {'val_morning': value1 } 
       e[str(date)].append(temp) 
      elif ii['date'] == str(date) and i['time'] == 'evening': 
       value2 = float(i['value2']) 
       temp = {'val_evening': value2 } 
       e[str(date)].append(temp) 

导致:

{'2016-10-20': [{'val_morning': 0.0}, {'val_evening': 0.0}], '2016-10-21': [{'val_morning': 0.0}, {'val_evening': 0.0}]} 

编辑 所需的输出:

{       
    '2016-10-20': {'val_morning': 0.0, 'val_evening': 0.0}, 
    '2016-10-21': {'val_morning': 0.0, 'val_evening': 0.0} 
} 
+0

为什么你想要的输出包含一个只有一个项目的列表?看起来这个列表是不必要的 - 不会'{'2016-10-20':{'value1':0.0,'value2':0.0},'2016-10-21':...'be better ? – mgilson

+0

表示同意,报废清单。将更新问题。谢谢 – user3939059

+0

每天总是只有2个值(早上对应于'value1',对应于'value2'的晚上对应一个)?或者一天能有更多的价值?在这种情况下你想做什么? – mgilson

回答

0

如果我理解正确的话,你想用字典来代替列表,你可以稍后添加到它的值。

如果是的话,你可以这样做:

dates = [datetime.date(2016, 10, 17), datetime.date(2016, 10, 18), datetime.date(2016, 10, 19), datetime.date(2016, 10, 20), datetime.date(2016, 10, 21), datetime.date(2016, 10, 22), datetime.date(2016, 10, 23)] 

e = defaultdict(dict) 
for key, value in d.iteritems(): 
    value = (sorted(value, key=itemgetter('date'), reverse=False)) 
    for date in dates: 
     for i in value: 
      if i['date'] == str(date) and i['time'] == 'morning': 
       value1 = float(i['value1']) 
       temp = {'val_morning': value1 } 
       e[str(date)].update(temp) #### HERE i replaced append with update! 
      elif ii['date'] == str(date) and i['time'] == 'evening': 
       value2 = float(i['value2']) 
       temp = {'val_evening': value2 } 
       e[str(date)].update(temp)#### HERE i replaced append with update! 

我简单地更换追加与update(当然取得了defaultdict使用字典而不是列表)

0

如果我理解正确

import datetime 
dates = [datetime.date(2016, 10, 17), datetime.date(2016, 10, 18), datetime.date(2016, 10, 19), datetime.date(2016, 10, 20), datetime.date(2016, 10, 21), datetime.date(2016, 10, 22), datetime.date(2016, 10, 23)] 

dict_x = {} 
for i in map(str,set(dates)): 
    dict_x[i] = {'val_morning': 0.0, 'val_evening': 0.0} 

dict_x 

output : 
{'2016-10-17': {'val_evening': 0.0, 'val_morning': 0.0}, 
'2016-10-18': {'val_evening': 0.0, 'val_morning': 0.0}, 
'2016-10-19': {'val_evening': 0.0, 'val_morning': 0.0}, 
'2016-10-20': {'val_evening': 0.0, 'val_morning': 0.0}, 
'2016-10-21': {'val_evening': 0.0, 'val_morning': 0.0}, 
'2016-10-22': {'val_evening': 0.0, 'val_morning': 0.0}, 
'2016-10-23': {'val_evening': 0.0, 'val_morning': 0.0}}