【发布时间】:2016-10-05 04:33:04
【问题描述】:
我有这个:
array1 = [[1,2,3],[1,2,3],[2,1,3],[2,1,3],[1,-2,3]]
array2 = [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[0,2,3],[2,1,3]]
并且想要创建这个:
multiArray1 = {[1,2,3]:2, [2,1,3]:2}
multiArray2 = {[1,2,3]:4, [2,1,3]:1}
问题:我试图将 multiArray1 和 multiArray2 作为包含相同值的字典,但键分别给出了这些值在 array1 和 array2 中出现的次数。
我不确定要在我的代码中更改什么。任何帮助将不胜感激。谢谢。
from collections import defaultdict
array1 = [[1,2,3],[1,2,3],[2,1,3],[2,1,3],[1,-2,3]]
array2 = [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[0,2,3],[2,1,3]]
def f(arrA,arrB):
multiArray1 = {}
multiArray2 = {}
intersect = set(map(tuple,arrA)).intersection(map(tuple,arrB))
print(set(map(tuple,arrA)).intersection(map(tuple,arrB)))
for i in intersect:
multiArray1.update({i:0})
multiArray2.update({i:0})
print(multiArray1)
print(multiArray2)
multipleArray1 = {}
multipleArray2 = {}
for i in intersect:
for j in range(len(arrA)):
if str(tuple(arrA[j])) in set(intersect):
multiArray1[tuple(arrA[j])].append(j)
print(multiArray1)
multipleArray1 = defaultdict(list)
for key, value in multipleArray1:
multipleArray1[i].append(j)
print(multipleArray1)
for j in range(len(arrB)):
if str(tuple(arrB[j])) in set(intersect):
multiArray2[tuple(arrB[j])].append(j)
multipleArray2 = defaultdict(list)
for key, value in multipleArray2:
multipleArray2[i].append(j)
print(multipleArray2)
print(multiArray1)
print(multiArray2)
f(array1,array2)
你从上面的代码得到的输出是这样的:
{(2, 1, 3), (1, 2, 3)}
{(2, 1, 3): 0, (1, 2, 3): 0}
{(2, 1, 3): 0, (1, 2, 3): 0}
{(2, 1, 3): 0, (1, 2, 3): 0}
{(2, 1, 3): 0, (1, 2, 3): 0}
【问题讨论】:
-
您不能将列表作为字典键 - 它们是可变的 -> 不可散列。
-
我的意思是 array2 和 array2 是数组的数组。另外,我是一个开始使用python的用户。几年前我自学了一些基本的python,但这就是我对python的了解。
-
尝试使用 collections.Counter 类,你必须确保,任何你想要存储和测量它的输入多重性的列表都被重新映射到一个元组,因为即使是 Counter 字典包装器也需要可散列的不可变条目作为键。如果您不清楚并且您无法找到,请详细询问如何使用我建议的 Counter 类执行此操作。我们在这里帮助他人。
-
根据您的代码,不,它们不是。它们是列表。
-
欢迎回到 Python @MeeSeongIm - 正如 DonkeyKong 所说,Python 中有数组。您在这里拥有的是列表(在方括号中),它们大多像数组一样工作,但是在学习时,注意措辞的细节差异通常是有益的,以尽量减少误解。请尝试我的收藏。上面的反建议和 tuple([1, 2, 3]) 从列表 [1, 2, 3] 中创建这样一个可散列的元组 (1, 2, 3) 沿强烈推荐和 HTH 的进一步问题
标签: python arrays python-3.x dictionary multiplicity