У меня есть список списков, таких как:(х, у) пара для максимального значения г в списке
nodes =[[nodeID,x,y,z],....]
Я хочу найти:
xi,yi for zi=zmax given zmax= max z for same x,y
и хранить (xi,yi,zi)
в другом списке ,
Я могу сделать это с помощью:
nodes=[[literal_eval(x) for x in item] for item in nodes]
maxz_levels=[]
for i,row in enumerate(nodes):
fe=0
maxz=0
nodeID,x,y,z=row
for j,line in enumerate(nodes):
nodeID2,x2,y2,z2=line
if x==x2 and y==y2 and z2>maxz:
maxz=z2
if len(maxz_levels)==0:
maxz_levels.append([x, y, maxz])
else:
for row2 in maxz_levels:
if row2[0]==x and row2[1]==y:
fe=1
if fe==0:
maxz_levels.append([x, y, maxz])
но это берет возрасты ... поэтому я думал использовать словарь, но я не найти простой способ сделать то, что я хочу. Мой код:
dic1=defaultdict(list)
for nodeID,x,y,z in nodes:
dic1[(x,y)].append((nodeID,z))
for key in dic1:
dic1[key].sort(key=lambda x:float(x[1]))
for j,row in enumerate(nodes):
nodeID,x,y,z=row
z_levels=[item[1] for item in dic1[(x,y)]]
#How to find easily and quickly the max of z_levels and the associated (x,y) coordinates?
Любые идеи? Благодаря
EDIT: пример:
nodes = [['1','1','1','2'],['2','1','1','3'],['3','0','0','5'],['4','0','0','4'],['5','1','2','4'],['6','0','0','40'],['7','0','10','4'],['8','10','0','4'],['9','0','0','4'],['10','2','1','4']]
Я хочу найти:
maxz_levels = [[1, 1, 3], [0, 0, 40], [1, 2, 4], [0, 10, 4], [10, 0, 4], [2, 1, 4]]
Вы должны инициализировать 'maxz' в первом цикле, я думаю. Он не ответит на вашу проблему, но я не уверен, что ваше текущее решение работает. –
Да, вы правы! Но в моем случае это работает, потому что maxz всегда один и тот же :) – jpcgandre