-1

我有一个程序可以为具有不同 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

我希望这很清楚,我感谢您提供的任何帮助。如果我能清除任何东西,请告诉我。

谢谢

4

5 回答 5

1

您是否考虑过使用列表?喜欢

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

当一种新类型出现时,您只需要将append它添加到列表中。

于 2013-07-10T09:16:33.857 回答
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
于 2013-07-10T10:13:42.350 回答
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}
于 2013-07-10T09:24:30.113 回答
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

这样,您无需为每种类型创建一个新变量。并且您可以在程序生成表时填充此字典,方法是:

data.update({new_id:{'y': y_val, 'x': x_val, 'type': type}})
于 2013-07-10T10:18:41.707 回答
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  )

类型的所有X1

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

类型的所有Y1

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

类型的所有X2

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

类型的所有Y2

>>> [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
于 2013-07-10T09:19:40.550 回答