鉴于功能需要一些改进:
def flatten(d, parent_key=''):
items = []
for k, v in d.items():
try:
items.extend(flatten(v, '%s%s.' % (parent_key, k)).items())
except AttributeError:
items.append(('%s%s' % (parent_key, k), v))
return dict(items)
我想修改上层功能。
这也使列表变得扁平化:
{'d': [1, 2, 3]}
对于这样的事情:
{'d[0]': 1, 'd[1]': 3, 'd[2]': 3}
修改 本规范适用于我,但它不像第一个那样光滑,有任何改进的想法吗?
def flatten_dict(d):
def items():
for key, value in d.items():
if isinstance(value, dict):
for subkey, subvalue in flatten_dict(value).items():
yield key + "." + subkey, subvalue
elif isinstance(value, list):
for index, val in enumerate(value):
yield key + "[" + str(index) + "]" , value[index]
else:
yield key, value
return dict(items())
答案 0 :(得分:0)
试试这个,
def flattern(dict_):
result = {}
for key in dict_:
for i,j in enumerate(dict_[key]):
result[key+'['+str(i)+']'] = j
return result
这样调用函数,
In [40]: d
Out[40]: {'a': [1, 2, 3, 7], 'd': [1, 2, 3]}
In [41]: flattern(d)
Out[41]: {'a[0]': 1, 'a[1]': 2, 'a[2]': 3, 'a[3]': 7, 'd[0]': 1, 'd[1]': 2, 'd[2]': 3}