[疑问] paddlenlp.data.Dict 输入是无序的字典,而输出却是有序的列表
收藏
我看了它的代码,如下, 输入数据的每个字段处理结果result是直接放在列表ret里的,那么如何从返回结果里得到我想要的字段的处理结果呢?
def __call__(self, data):
ret = []
for col_name, ele_fn in self._fn.items():
result = ele_fn([ele[col_name] for ele in data])
if isinstance(result, (tuple, list)):
ret.extend(result)
else:
ret.append(result)
return tuple(ret)
下面是测试代码, data1和data2都是字典列表,只是字段定义顺序不同
from paddlenlp.data import Stack, Pad, Dict
data1 = [
{'labels': [1], 'token_ids': [1, 2, 3, 4]},
{'labels': [0], 'token_ids': [5, 6, 7]},
{'labels': [1], 'token_ids': [8, 9]},
]
data2 = [
{'token_ids': [1, 2, 3, 4],'labels': [1]},
{'token_ids': [5, 6, 7],'labels': [0]},
{'token_ids': [8, 9],'labels': [1]},
]
batchify_fn = Dict({'token_ids': Pad(pad_val=0), 'labels': Stack()})
#%%
ret1= batchify_fn(data1)
ret2= batchify_fn(data2)
ret1和ret2结果如下
两个输出结果第0个元素对应token_ids , 第1个元素对应labels
也就是说输出结果里每个字段的结果并不是和输入数据中字段定义顺序相同, 那么如果
我用label ,token_ids = batchify_fn(data1) 去拆分处理结果, 不就出错了吗
1
收藏
请登录后评论
在python3.6+版本中python的dict是按照定义时候的顺序来遍历的
原来如此! 涨知识了,感谢~