我有一个扁平化的json(使用flatten json库进行了扁平化)。我现在必须将它们分组
{ 'persons_0_address_building': '710',
'persons_0_address_coord': '[123, 40]',
'persons_0_address_street': 'Avenue 1',
'persons_0_address_zipcode': '12345',
'persons_0_cuisine': 'Chinese',
'persons_0_grades_0_date': '2014-03-03T00:00:00.000Z',
'persons_0_grades_0_grade': 'A',
'persons_0_grades_0_score_x': 1,
'persons_0_grades_0_score_y': 2,
'persons_0_grades_1_date': '2011-11-23T00:00:00.000Z',
'persons_0_grades_1_grade': 'A',
'persons_0_grades_1_score_x': 11,
'persons_0_grades_1_score_y': 22,
'persons_0_id': '4d322fa8f552',
'persons_0_name': 'Shash'
}
所需结果如下。
person_address =
[
{
'building': '710',
'coord': '[123, 40]',
'street': 'Avenue 1',
'zipcode': '12345',
'id': '4d322fa8f552'
}
]
person =
[{
'cuisine': 'Chinese',
'id': '4d322fa8f552',
'name': 'Shash'
}]
基本思想是在分组之后,我可以将每个列表加载到一个平面文件中。
到目前为止我已经尝试了什么:
_
,对它们进行排序,然后得出结果。这种方法有很多问题。 defaultdict
,但我什至无法远程了解。 有没有更好的方法可以做到这一点。
答案 0 :(得分:1)
我想我刚刚找到了您想要的东西。
首先,您应该定义这两个函数:
webView = (WebView) findViewById(R.id.webView);
这两个函数将使用键列表从列表中from functools import reduce
import operator
def get_from_dict(data_dict, map_list):
return reduce(operator.getitem, map_list, data_dict)
def set_in_dict(data_dict, map_list, value):
get_from_dict(data_dict, map_list[:-1])[map_list[-1]] = value
和set
进行复制,
访问here,以了解有关这两个的更多信息。
然后执行以下代码以获得所需的输出:
get
假设您的输入在final_dict = {}
for key, value in input_.items():
keys_array = []
for i in key.split('_'):
try:
index = int(i)
except ValueError:
keys_array.append(i)
try:
get_from_dict(final_dict, keys_array)
except KeyError:
set_in_dict(final_dict, keys_array, {})
except IndexError:
set_in_dict(final_dict, keys_array[:-1], {})
else:
keys_array.append(index)
try:
get_from_dict(final_dict, keys_array)
except IndexError:
if len(get_from_dict(final_dict, keys_array[:-1])) > 0:
get_from_dict(final_dict, keys_array[:-1]).append({})
else:
set_in_dict(final_dict, keys_array, [])
except KeyError:
set_in_dict(final_dict, keys_array[:-1], [{}])
else:
set_in_dict(final_dict, keys_array, value)
中,而您希望的输出在input_
中。
在您的示例中,输出将如下所示:
final_dict