Python 2.7 - 从表中提取信息并将其分配给变量

时间:2013-07-10 09:09:22

标签: python

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

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

谢谢

5 个答案:

答案 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}})