我会写一个例子让你理解我:
例如,我有以下3点:(0,1,244) - (0,1,255) - (1,2,133)
实际上我需要在2点具有相同(x,y)时平均Z.我的想法是将它们存储在具有双索引/键的某些东西(数组,字典?)中,其中值是Z的数组。
所以我基本上想要这个:[0,1,[244,255]]和[1,2,[133]]
我的问题是我不知道用什么来存储它们最简单的方法......
提前致谢!
答案 0 :(得分:3)
使用字典:
points = [(0, 1, 244), (0, 1, 255), (1, 2, 133)]
d = {}
for point in points:
key = point[:2]
if key in d.keys():
(d[key]).append(point[2])
else:
d[key] = [point[2]]
print(d)
对于平均值:
import numpy as np
for k in d.values():
print(np.mean(k))
答案 1 :(得分:2)
元组可以是字典键:
myDict = {(1,2): 3}
完全有效。
另一种方法是使用itertools.groupby
,但请确保您的列表已按照您要用于群组的关键字排序(https://docs.python.org/3/library/itertools.html#itertools.groupby):
from itertools import groupby
myList = [(1,2,3), (1,2,4), (1,3,4)]
for grp, values in groupby(myList, lambda x: (x[:2])):
print(grp, list(values))
答案 2 :(得分:2)
以下是执行此操作的几种方法:
正如Geotop建议的那样,使用一个用元组索引的字典 根据我这是一个优雅的解决方案。
根据目的和遍历的难易程度,您可以将其转换为嵌套列表,如下所示:
a = [[(1,2),(3,4),(5,6)], [[123,234,345],[567,678,543],[433,645,754]]]
现在,您可以使用z
访问与(x,y)
对应的a[1][i]
值列表,其中元组(x,y)
存储为a[0][i]
。
第二种方法对我来说似乎要好得多,因为它避免使用字典并使索引更容易(因为它用整数索引)。但最后,这一切都取决于你的目的。
如果您经常查看数据或数据量很大,那么将它随机存储在列表中并通过搜索获取值是个坏主意。