将字典映射到其值之一

时间:2020-08-28 14:10:19

标签: python

我有可变区,里面充满了数据库中的数据

{'region': 'SK', 'hour': 21, 'flag': 1}

我已经需要更改此代码,以使其适合

regions = self.taskreportdao.get_table_data_hours(report_date, 
None if Report03Request.HOUR_CODE_ALL_HOURS == hour else hour) 

data = {}

def process_region(r):
    if not data.has_key(r['hour']):
        data[r['hour']] = []
    data[r['hour']].append(r['region'])    
map(process_region, regions)
return data

现在它返回{21:['CZ','SK'] }

但是我需要它来返回{21: {'flag': 1, 'regions':['CZ','SK'] }}

如何转换字典?

1 个答案:

答案 0 :(得分:0)

我一直在处理您的代码,不确定数据中“ CZ”来自哪里,但这是我的解决方案:

regions = [{'region': 'CZ', 'hour': 21, 'flag': 1} , {'region': 'SK', 'hour': 21, 'flag': 1} ]
data = {}

def removekey(d, key):
    r = dict(d)
    del r[key]
    return r

def process_region(r):
  if r['hour'] not in data:
    new_dict = removekey(r,'hour')
    new_dict['regions'] = [new_dict.pop('region'),'CZ']
    data[r['hour']] = new_dict
  else:
    data[r['hour']]['regions'].append(r['region'])

for d in regions:  
    process_region(d)
    print(data)
    #{21: {'flag': 1, 'regions': ['CZ']}} - 1st iteration
    #{21: {'flag': 1, 'regions': ['CZ', 'SK']}} - 2nd iteration

您将字典d从数组或字典区域发送到功能process_regions,其中,如果字典数据中没有键r['hour'],则您将创建不带键hour的新字典,将关键区域重命名为区域,并从dict中弹出值。最后,您创建字典数据并将新的字典值分配给键r['hour']。如果键r['hour']已在数据中,则仅扩展区域数组。您可能要检查键是否尚未在数组中。