将两个列表放入字典错误:不可哈希类型:“列表”

时间:2018-08-30 03:16:51

标签: python dictionary

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

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

concatenate-item-in-list-to-strings

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

1 个答案:

答案 0 :(得分:1)

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

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

请注意,如果有多个键出现多次,这将删除数据(因此,如果YiW同时包含["africa", "trip"]和更高版本的["asia", "trip"],则您只会将"trip"映射到与["asia", "trip"]配对的值)。如果这不是您想要的,则需要对所需的行为进行更具体的说明。