2013-02-24 71 views
1

我需要一個n元素的數組,其中每個元素都有2個屬性。替代Python中的二維數組

A.element[0].name="qwe" 
A.element[0].age=23 
A.element[1].name="www" 
A.element[1].age=24 
... 
A.element[n].name="e" 
A.element[n].age=25 

是否有另一種不涉及設計類的形式?

回答

2

您可以使用一個字典數組。

事情是這樣的:

A = [ 
    {'name': 'qwe', 'age': 23}, 
    {'name': 'www', 'age': 24} 
] 

可以簡化通過做這樣的插入:

A = [] 

def addPerson(name, age): 
    global A 
    A.append({'name': name, 'age': age}) 

或者只是讓字典成陣列,這樣你就不必指定「名」和'年齡'在每一行。寫一個代表一個人的類(或者其他任何東西)可能會更容易一些。

+0

我很喜歡,但刪除全局! – tdelaney 2013-02-24 05:21:09

4

collections.namedtuple

>>> from collections import namedtuple 
>>> Element = namedtuple('Element', 'name age') 
>>> A.element[0] = Element('qwe', 23) 
>>> print A.element[0].name 
qwe 
>>> print A.element[0].age 
23 

但是,這些元組,而不是列表,所以他們不能改變。此外,這些仍然是基本的類,但你只是沒有用class關鍵字來定義它們。有關詳細說明,請參閱this

1

如果使用numpy的,你也可以使用結構數組:

In [66]: struct = np.dtype([("name", np.object), ("age", np.int)]) 
a = np.array([("abc", 12), ("def", 20), ("xyz", 50)], dtype=struct) 
a[0] 
Out[66]: ('abc', 12) 

In [67]: a[0]["name"] 
Out[67]: 'abc' 

In [68]: a["name"] 
Out[68]: array([abc, def, xyz], dtype=object) 

In [69]: a["age"] 
Out[69]: array([12, 20, 50]) 

In [72]: a["age"][2] 
Out[72]: 50