嗨,我正在尝试将两个列表作为键和值放入字典中,但出现错误
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 但是他们在这种情况下不起作用,有人可以帮忙吗?谢谢你!
答案 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"]
配对的值)。如果这不是您想要的,则需要对所需的行为进行更具体的说明。