如何编写Python函数将标签列表转换为唯一二进制编码映射字典
实现思路
先计算能覆盖所有标签数量的最小二进制位长,将每个标签对应的索引转成对应长度的二进制格式,再拆分转为整数元组即可。
实现代码
def encode(labels): # 计算需要的二进制位数,保证所有编码长度一致且不重复 bit_length = (len(labels) - 1).bit_length() encode_dict = {} for index, label in enumerate(labels): # 转二进制并去除前缀,补前导零到指定长度 bin_val = bin(index)[2:].zfill(bit_length) # 逐位转整数后生成元组 encode_dict[label] = tuple(int(bit) for bit in bin_val) return encode_dict
测试验证
4个标签场景测试
labels = ["a", "b", "c", "d"] print(encode(labels)) # 输出:{'a': (0, 0), 'b': (0, 1), 'c': (1, 0), 'd': (1, 1)},完全匹配要求
2个标签场景测试
默认逻辑下会生成最短的1位唯一编码:
labels = ["a", "b"] print(encode(labels)) # 输出:{'a': (0,), 'b': (1,)}
如果你需要和给出的示例输出一致(固定2位长度),把代码中计算bit_length的行修改为bit_length = max((len(labels) - 1).bit_length(), 2)即可,修改后测试输出为:
{'a': (0, 0), 'b': (0, 1)}
内容的提问来源于stack exchange,提问作者Matias Lopez
相关产品推荐
相关产品推荐

