首页 > 解决方案 > 将两个列表制作成字典错误:不可散列类型:'list'

问题描述

嗨,我正在尝试将两个列表作为键和值放入字典中,但出现错误

TypeError                                 Traceback (most recent call last)
<ipython-input-535-a88b451e7100> in <module>()
      1 #
      2 DN = {key: value for key, value in zip(NiW, NiV)}
----> 3 DY = {key: value for key, value in zip(YiW, YiV)}
      4 D = dict(DN, **DY)
TypeError: unhashable type: 'list'

我做了一些研究,似乎是嵌套列表的外部列表导致了这个错误,但我不确定

数据

YiW
[['africa', 'trip'],
['asia', 'travel'],
['europe', 'holiday']]

YiV
[[array([-0.34219775,  0.61445   ,  0.19807251],
array([ 1.8527551 ,  2.4294894 ,  0.3062766],
[array([-0.34219775,  0.61445   ,  0.19807251,  0.15776388],
array([ 1.8527551 ,  2.4294894 ,  0.3062766],
[array([-0.34219775,  0.61445   ,  0.19807251,  0.15776388],
array([ 1.8527551 ,  2.4294894 ,  0.3062766]]

想法输出:

{'africa':array([-0.34219775,  0.61445   ,  0.19807251],
'trip':array([-0.34219775,  0.61445   ,  0.19807251,  0.15776388]}etc..

我尝试了很多方法来删除外部列表: flatten-list-of-lists

将列表中的项目连接到字符串

how-to-convert-nested-list-into-dictionary-in-python-where-lst00-is-the-key 但它们在这种情况下不起作用,有人可以帮忙吗?提前谢谢你!

标签: pythondictionary

解决方案


您似乎希望位置和类型都独立映射到相同的值。您需要使 dict 理解使用嵌套循环来实现这一点,因为其中的每个值YiW都是要创建list的键,而不是单个键。简单的方法:

DY = {key: value for keys, value in zip(YiW, YiV) for key in keys}

请注意,如果任何键出现多次,这将删除数据(因此,如果YiW包含 both["africa", "trip"]和 later ["asia", "trip"],您将仅映射"trip"到与 配对的值["asia", "trip"])。如果这不是您想要的,您将需要更具体地说明所需的行为。


推荐阅读