2013-07-10 2 views
-1

다른 ID 태그가있는 포인트에 대해 X 및 Y 값 테이블을 생성하는 프로그램이 있습니다. ID 태그가 다르더라도 같은 유형일 수 있습니다. 동일한 유형에 속하는 모든 X 및 Y 값을 함께 추가하려고합니다.Python 2.7 - 테이블에서 정보 추출 및 변수에 할당

문제는 테이블이 생성 될 때까지 얼마나 많은 유형이 있는지 알 수 없기 때문에 각 유형에 해당하는 변수를 작성하는 방법과 누적 값을 함께 추가하는 방법을 알고 싶습니다.

ID Type X Y 
10 1 34 23 
11 1 34 54 
12 1 42 4 
13 1 76 3 
14 1 35 56 
15 1 23 4 
16 2 56 5 
17 2 46 6 
18 2 35 77 
19 3 75 6 
20 3 54 7 
21 3 43 6 

이 내가 달성하고자하는 내용의 예입니다 : 여기

내가 작업하고있는 테이블

고유 변수는 유형의 수에 따라 각 유형에 대해 작성됩니다

. 이 경우 유형 1-3에 대해 3 개의 변수가 필요합니다.

Type_1_Total_X = 34+34+42+76+35+23 = 244 
Type_2_Total_X = 56+46+35 = 137 

나는 희망하고 제공 할 수있는 도움에 감사드립니다. 내가 무엇인가를 지울 수 있으면 알려주세요.

감사

+1

다음과 같이 코드를 표시하는 방식은 무엇입니까? 질문에 포함시킬 수 있습니까? –

+3

테이블을 생성하는 프로그램은 무엇입니까? 파이썬 프로그램인가요? 값이 파일에 저장되어 있습니까? –

답변

0

당신을 돕는이 있습니까? 어떻게 테이블을 얻을 수 있는지 모르겠지만 프로그램에서이 코드의 나머지 부분을 사용할 수 있습니다.

# Created a simple class for a row in your table 
class Row(object): 
    def __init__(self, i, t, x, y): 
     self.i, self.t, self.x, self.y = int(i), int(t), int(x), int(y) 

# Used your example rows... 
example_rows = """10 1 34 23 
11 1 34 54 
12 1 42 4 
13 1 76 3 
14 1 35 56 
15 1 23 4 
16 2 56 5 
17 2 46 6 
18 2 35 77 
19 3 75 6 
20 3 54 7 
21 3 43 6""" 

# Build a list with rows from the example 'table' 
l = [Row(*i) for i in (line.split() for line in example_rows.split("\n"))] 

# Create a types_x dictionary 
types_x = {} 
for r in l: 
    types_x[r.t] = types_x.get(r.t, 0) + r.x 

# Print the result 
print(types_x) # {1: 244, 2: 137, 3: 172} 
+0

고맙습니다. 나는 파이썬에 매우 익숙하다. 당신이 제공 한 코드는 완벽하게 작동하지만 이해할 수없는 몇 가지 사항이 있습니다 : 당신 (* i)이 클래스의 인수를 자동으로 채울 때 두 번째로 types_x.get (rt, 0) 함수를 이해하지 못합니다.) + rx와 면적의 합을 계산하는 방법. 대답 할 시간이 있다면 감사하겠습니다. 도움을 청하면 다시 감사드립니다! James – alkey

+0

* ...은 메소드 또는 함수에 대한 인수를 구문 분석하는 데 사용됩니다. 이 예제에서는 line.split()을 사용하여 만든 목록입니다. types_x.get()은 '현재'사전 항목을 가져 오는 데 사용되지만 값이 사전에없는 경우 값 0이므로 0부터 시작합니다. off-topic : 키워드 인수를 구문 분석하려면 ** d를 사용할 수 있습니다 (d는 사전이고 '구문 분석하는 함수 또는 메서드'가 키워드 인수를 수락한다고 가정). – joente

+0

typeset.x.get()에 약간 이상한 점을 알았습니다. 사전에서 값을 얻으려면 dict [key]를 사용할 수 있지만 키가 존재하지 않으면 KeyError가 발생합니다. 메서드 .get()은 키가 존재하지 않는 경우 'default'값으로 사용할 수있는 두 번째 인수를 허용합니다. 예를 들면 다음과 같습니다. dict.get (key, 'default_value'). 우리의 경우 기본값을 0으로 사용하고 r.x를 추가하기 시작합니다. – joente

1

당신은 목록을 사용하여 생각 했습니까?

types_x[1] = 34+34+42+76+35+23 
types_x[2] = 56+46+35 

새로운 유형이 올

처럼, 당신은 그냥이 목록에 append해야합니다.

0

데이터를 어떻게 구성 하느냐에 달려 있습니다. 타입 1

>>> data_point = {} 
>>> data_point[10] = (1, 34, 23) 
>>> data_point[11] = (1, 34, 54) 
>>> data_point[12] = (1, 42, 4 ) 
>>> data_point[13] = (1, 76, 3 ) 
>>> data_point[14] = (1, 35, 56) 
>>> data_point[15] = (1, 23, 4 ) 
>>> data_point[16] = (2, 56, 5 ) 
>>> data_point[17] = (2, 46, 6 ) 
>>> data_point[18] = (2, 35, 77) 
>>> data_point[19] = (3, 75, 6 ) 
>>> data_point[20] = (3, 54, 7 ) 
>>> data_point[21] = (3, 43, 6 ) 

모든 X 값 : 유형 1

>>> [x[1] for x in data_point.itervalues() if x[0] == 1] 
[34, 34, 42, 76, 35, 23] 

모든 Y 값 : 형식 0,123,534,436,297의

>>> [x[2] for x in data_point.itervalues() if x[0] == 1] 
[23, 54, 4, 3, 56, 4] 

모든 X 값 여기서

는 대안 4,: 형식 2

>>> [x[1] for x in data_point.itervalues() if x[0] == 2] 
[56, 46, 35] 

모든 Y 값 :

>>> [x[2] for x in data_point.itervalues() if x[0] == 2] 
[5, 6, 77] 

.. 등. 당신이 sum()를 사용하여 얻을 것이다

합계 :

>>> sum([x[1] for x in data_point.itervalues() if x[0] == 1]) 
244 
>>> sum([x[2] for x in data_point.itervalues() if x[0] == 1]) 
144 
>>> sum([x[1] for x in data_point.itervalues() if x[0] == 2]) 
137 
>>> sum([x[2] for x in data_point.itervalues() if x[0] == 2]) 
88 
0

빌드 키가 유형 테이블의 속성입니다 사전 : 당신은 다음과 같은 구조에 데이터를 저장할 수 있습니다

 #ID Type X Y 
table="""10 1 34 23 
11 1 34 54 
12 1 42 4 
13 1 76 3 
14 1 35 56 
15 1 23 4 
16 2 56 5 
17 2 46 6 
18 2 35 77 
19 3 75 6 
20 3 54 7 
21 3 43 6""" 

summary = {} 

for row in table.split('\n'): 
    (id_, type_, x, y) = row.split() 
    old_x, old_y = summary.get(type_, [0, 0]) 
    summary[type_] = [int(x) + old_x, int(y) + old_y] 

print summary 
0

: 추가 사용을 위해

data = {10: {'type': 1, 'x': 34, 'y': 23 }, 
     11: {'type': 1, 'x': 34, 'y': 54 }, 
     12: {'type': 1, 'x': 42, 'y': 4}, 
     16: {'type': 2, 'x': 56 ,'y': 5}} 

:

sum([item['x'] for item in data.itervalues() if item['type'] == 1]) 
#110 

thi 당신은 모든 유형에 대해 새로운 변수를 생성 할 필요가 없습니다.

data.update({new_id:{'y': y_val, 'x': x_val, 'type': type}})