我有可变区,里面充满了数据库中的数据
{'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'] }}
。
如何转换字典?
答案 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']
已在数据中,则仅扩展区域数组。您可能要检查键是否尚未在数组中。