in anli/src/utils/list_dict_data_tool.py [0:0]
def append_subfield_from_list_to_dict(subf_list, d_dict, o_key_field_name, subfield_key_name,
subfield_name='merged_field', check=False):
# Often times, we will need to split the one data point to multiple items to be feeded into neural networks
# and after we obtain the results we will need to map the results back to original data point with some keys.
# This method is used for this purpose.
# The method can be invoke multiple times, (in practice usually one batch per time.)
"""
:param subf_list: The forward list.
:param d_dict: The dict that contain keys mapping to original data point.
:param o_key_field_name: The fieldname of original data point key. 'pid'
:param subfield_key_name: The fieldname of the sub item. 'fid'
:param subfield_name: The merge field name. 'merged_field'
:param check:
:return:
"""
for key in d_dict.keys():
d_dict[key][subfield_name] = dict()
for item in subf_list:
assert o_key_field_name in item
assert subfield_key_name in item
map_id = item[o_key_field_name]
sub_filed_id = item[subfield_key_name]
assert map_id in d_dict
# if subfield_name not in d_dict[map_id]:
# d_dict[map_id][subfield_name] = dict()
if sub_filed_id not in d_dict[map_id][subfield_name]:
if check:
assert item[o_key_field_name] == map_id
d_dict[map_id][subfield_name][sub_filed_id] = item
else:
print("Duplicate forward item with key:", sub_filed_id)
return d_dict