我有一个程序,可以为具有不同ID标记的点生成X和Y值的表。即使它们具有不同的ID标签,它们也可以是相同的类型。我想将属于同一类型的所有X和Y值一起添加。
问题是我不知道在生成表之前将会有多少类型,我想知道如何创建一个对应于每种类型的变量,然后我将如何将这些值累加到一起。
以下是我正在使用的表格:
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
这是我想要实现的一个例子:
根据类型的数量为每种类型创建唯一变量。在这种情况下,我需要3个类型1-3的变量。
Type_1_Total_X = 34+34+42+76+35+23 = 244
Type_2_Total_X = 56+46+35 = 137
我希望这很清楚,我感谢您提供的任何帮助。如果我能搞清楚,请告诉我。
谢谢
答案 0 :(得分:1)
您是否想过使用清单?像
types_x[1] = 34+34+42+76+35+23
types_x[2] = 56+46+35
当新类型出现时,您只需append
将其添加到列表中。
答案 1 :(得分:0)
取决于您希望如何构建数据。
这是另一种选择:
>>> 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
类型的所有1
值:
>>> [x[2] for x in data_point.itervalues() if x[0] == 1]
[23, 54, 4, 3, 56, 4]
X
类型的所有2
值:
>>> [x[1] for x in data_point.itervalues() if x[0] == 2]
[56, 46, 35]
Y
类型的所有2
值:
>>> [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
答案 2 :(得分: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}
答案 3 :(得分:0)
构建一个字典,其中键是表的type属性:
#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
答案 4 :(得分: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
通过这种方式,您无需为每种类型创建新变量。并且您可以在程序生成表时使用以下命令填充此dict:
data.update({new_id:{'y': y_val, 'x': x_val, 'type': type}})