2013-03-25 152 views
0

我有一组数据是这样的格式X,Y:冷凝X,Y由Y

a = [([2,-2,0.29]), 0)([-2,0,1.9]), 2),([ 2,1,2.35]),3),([2, -3,2.96]), 3) 

是有办法由y凝结,这样我会得到([2,1, 2.35]),([2,-3,2.96])在一起?我想把它们放在一起,这样我就可以找到两个x中每个的最大x和y。正如你所看到的,我的x项实际上是x,y,z本身。

编辑 这是我试过的代码。我需要一种方法让它在'3'中不需要编码的地方。

import numpy as np 
a = [([2, -2, 0.29], 0), ([-2, 0, 1.9], 2), ([2, 1, 2.35], 3), ([2, -3, 2.96], 3)] 
b = [0,2,3,3,5,5,6,6,6,8,8,9,10,11,11,11,16,16,16,16,17,18,19,20,20,20,23,24,25,26,28] 
cur = [] 
for x,y in a: 
if y == 3: 
    cur.append(x) 
    b.remove(3) 
+0

当然,这是可能的。你有没有尝试写一些代码尝试它?发生了什么? – 2013-03-25 23:44:03

+0

你的括号不正确匹配......因此,它是很难理解什么是被要求 – 2013-03-25 23:44:55

+1

也许'A = [(2,-2,0.29],0),([-2,0,1.9], 2),([2,1,2.35],3),([2,-3,2.96],3)]'是你的意思? – mgamba 2013-03-25 23:49:01

回答

0
In [1]: a = [([2, -2, 0.29], 0), ([-2, 0, 1.9], 2), ([2, 1, 2.35], 3), ([2, -3, 2.96], 3)] 

In [2]: result={} 

In [3]: for x in a: 
    ...:  result.setdefault(x[1],[]).append(x[0]) 
    ...:  

In [4]: result[3] 
Out[4]: [[2, 1, 2.35], [2, -3, 2.96]] 
+0

这正是我正在寻找的。我想我需要更多地看字典。 – pioneer903 2013-03-26 02:38:40

+0

你能解释一下这个工作更详细吗?或者直接给我的文档。当你想设置为'字典键default'价值 – pioneer903 2013-03-26 02:50:38

+0

http://docs.python.org/2/library/stdtypes.html#dict.setdefault – namit 2013-03-26 02:54:02

1

你可以做这样的事情把它们放到一个默认字典中。

from collections import defaultdict 
new_data = defaultdict() 
for data_point in a: 
if data_point[1] in new_data: 
    new_data[data_point[1]].append(data_point[0]) 
else: 
    new_data[data_point[1]] = [data_point[0]] 

然后让每个零件的最高值,你可以做

for item in new_data.items(): 
    print "For key: ", 
    print item[0] 
    print max([data[0] for data in item[1]]) 
    print max([data[1] for data in item[1]]) 
    print max([data[2] for data in item[1]]) 
    print "---------" 
0

我认为有两种解决方案。

如果你知道等于y值的所有群体彼此相邻(例如,因为你的列表进行排序),可以使用itertools.groupby到相邻值组合:

from itertools import groupby 

def condense_on_y(lst): 
    return [group[0][1], [x for x,y in group] 
      for group in groupby(lst, lambda item: item[1])] 

如果您的列表可能不是有序的,那么我认为你需要把东西放在另一个数据结构中。下面是一个使用defaultdictitertools.chain.from_iterable一个解决方案:

from collections import defaultdict 

def condense(lst): 
    dct = defaultdict(list) 
    for x, y in lst: 
     values[y].append(x) 

    return list(dct.items()) # list(...) wrapper not needed in Python 2