我有一个 numpy 数组列表,如下所示:
list_list = [np.array([53, 5, 2, 5, 5, 2, 1, 5, 9]), np.array([6, 4, 1,2, 53, 23, 1, 4])]
以及上面每个数组的 ID 列表:
ID = [6, 2]
如何获取一个字典,对于 list_list
中的每个唯一值,我都能获取包含该值的 ID 列表?
例如,对于这个非常简单的示例,我想要类似的内容:
{53: [6, 2]、5: [6]、2: [6, 2]、1: [6, 2] 等}
我的实际 list_list 长度超过 1000 个列表,每个 numpy 数组包含大约 1000 万个值,因此解决方案的效率是关键。
我知道 dict(zip(ID, list_list))
会给我一个对应于 ID 及其所有值的字典,但它不会给我对应于 ID 的值,这这就是我想要的。
谢谢!
最佳答案
解决此类问题的最佳方法是将其分解为更小的步骤。如果合适的话,用英语和伪 python 的组合来描述这些内容。您似乎有正确的想法来开始使用 zip(ID, list_list)
。正如我们在评论中讨论的那样,这将创建两个列表之间的关联。
那么接下来怎么办?好吧,我们想要构建一个字典,以 list_list
中的值作为键。为此,我们需要迭代 zip()
返回的列表:
for id, list in zip(ID, list_list):
pass
然后我们需要迭代list
的元素来确定字典的键:
for id, list in zip(ID, list_list):
for x in list:
pass
现在我们需要一个空字典来添加内容:
d = {}
for id, list in zip(ID, list_list):
for x in list:
pass
接下来,我们需要获取字典的列表(如果存在)。如果它不存在,我们可以使用一个空列表来代替。然后将id
追加到列表中并将其放入字典中:
d = {}
for id, list in zip(ID, list_list):
for x in list:
l = d.get(x, [])
l.append(id)
d[x] = l
请注意我如何用文字描述每一步要做什么,然后将其翻译成 Python。像这样将问题分解为小步骤是培养程序员技能的关键部分。
关于python - 获取字典映射值到引用 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51446912/