Python中将二维列表作为键、一维列表作为值生成字典求解
双列表配对为字典的解决方案
失败原因
你直接使用zip配对失败的核心原因是:Python 字典的键必须是可哈希的不可变类型,而list1中的元素是可变的列表对象,无法直接作为字典的键,运行时会抛出TypeError: unhashable type: 'list'错误。
同时你给出的期望输出格式不符合Python语法规范,不存在以列表为键的字典类型。
可行实现方案
方案1:将子列表转为元组作为键(最常用)
元组是不可变可哈希类型,完全可以满足索引需求,取值时只需将查询目标也转为元组即可:
list1 = [[0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0, 1, 1], [0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 1, 1, 0, 0]] list2 = [0, 1, 1, 2] dict_output = {tuple(k): v for k, v in zip(list1, list2)} print(dict_output)
输出结果:
{(0, 0, 0, 0, 0, 1, 0, 0): 0, (0, 0, 0, 0, 1, 0, 1, 1): 1, (0, 0, 0, 0, 1, 0, 1, 0): 1, (0, 0, 0, 0, 1, 1, 0, 0): 2}
取值示例:
# 查询对应列表的数值 target = [0, 0, 0, 0, 0, 1, 0, 0] print(dict_output[tuple(target)]) # 输出 0
方案2:成对存储为元组列表(保留原列表结构)
如果你不需要通过键快速索引,只需要保留两个列表的配对关系,可以直接生成配对列表:
pair_list = list(zip(list1, list2)) print(pair_list)
输出结果:
[([0, 0, 0, 0, 0, 1, 0, 0], 0), ([0, 0, 0, 0, 1, 0, 1, 1], 1), ([0, 0, 0, 0, 1, 0, 1, 0], 1), ([0, 0, 0, 0, 1, 1, 0, 0], 2)]
内容的提问来源于stack exchange,提问作者user16734496
相关产品推荐
相关产品推荐

