如何在Python中处理2D数组?

时间:2016-06-03 09:59:45

标签: python python-2.7 multidimensional-array

我想拥有一个二维数组,第一个参数是学生的名字,第二个是他的结果。

我试试这个:

listStudentResult = [] 
listStudentResult.append([])
listStudentResult[0].append("Alex")
listOfasinEan[0].append(20)

lisStudentResult.append([])
listStudentResult[1].append(Paul)
listStudentResult[1].append(15)

我怎么能得到Alex的结果? 我不想listStudentResult[0][1] 我需要像

这样的东西
listStudentResult[0]["Alex"]

3 个答案:

答案 0 :(得分:2)

使用词典:

listStudentResult = [] 
listStudentResult.append({"Alex": 20})
listStudentResult.append({"Paul": 15})

答案 1 :(得分:2)

通过查看您的要求,我建议您在python中使用字典。

为了解释字典,我将以你的例子

listStudentResult = dict()
listStudentResult['Alex'] = 20
listStudentResult['Paul'] = 15

您可以使用listStudentResult [' Alex']访问元素。

答案 2 :(得分:1)

复杂类:

class AutoVivification(dict):
    """Implementation of perl's autovivification feature. Has features from both dicts and lists,
    dynamically generates new subitems as needed, and allows for working (somewhat) as a basic type.
    """
    def __getitem__(self, item):
        if isinstance(item, slice):
            d = AutoVivification()
            items = sorted(self.iteritems(), reverse=True)
            k,v = items.pop(0)
            while 1:
                if (item.start < k < item.stop):
                    d[k] = v
                elif k > item.stop:
                    break
                if item.step:
                    for x in range(item.step):
                        k,v = items.pop(0)
                else:
                    k,v = items.pop(0)
            return d
        try:
            return dict.__getitem__(self, item)
        except KeyError:
            value = self[item] = type(self)()
            return value

    def __add__(self, other):
        """If attempting addition, use our length as the 'value'."""
        return len(self) + other

    def __radd__(self, other):
        """If the other type does not support addition with us, this addition method will be tried."""
        return len(self) + other

    def append(self, item):
        """Add the item to the dict, giving it a higher integer key than any currently in use."""
        largestKey = sorted(self.keys())[-1]
        if isinstance(largestKey, str):
            self.__setitem__(0, item)
        elif isinstance(largestKey, int):
            self.__setitem__(largestKey+1, item)

    def count(self, item):
        """Count the number of keys with the specified item."""
        return sum([1 for x in self.items() if x == item])

    def __eq__(self, other):
        """od.__eq__(y) <==> od==y. Comparison to another AV is order-sensitive
        while comparison to a regular mapping is order-insensitive. """
        if isinstance(other, AutoVivification):
            return len(self)==len(other) and self.items() == other.items()
        return dict.__eq__(self, other)

    def __ne__(self, other):
        """od.__ne__(y) <==> od!=y"""
        return not self == other

简单的课程:

class vividict(dict):  
    def __getitem__(self, item):
        try:
            return dict.__getitem__(self, item)
        except KeyError:
            value = self[item] = type(self)()
            return value

的示例:

d = vividict()
print d

d['John']['results'] = [90]

print d

d['John']['results'].append(10) 

print d     

d = AutoVivification()

print d

d['John']['results'][0]=20
print d
d['John']['results'].append(20)

for result in [30,25,60,100,99]:
    d['John']['results'].append(result)

onlyNumbers=True

lastKey=max(d['John']['results'].keys())
for n,result in enumerate('5 15 25 33.1 40'.split()):
    n+=lastKey
    d['John']['results'][n]=result if not onlyNumbers else float(result)

print d

from pprint import pprint as ppr

ppr(d)

'''
output:
{}
{'John': {'results': [90]}}
{'John': {'results': [90, 10]}}
{}
{'John': {'results': {0: 20}}}
{'John': {'results': {0: 20, 1: 20, 2: 30, 3: 25, 4: 60, 5: 100, 6: 5.0, 7: 15.0, 8: 25.0, 9: 33.1, 10: 40.0}}}
{'John': {'results': {0: 20,
                      1: 20,
                      2: 30,
                      3: 25,
                      4: 60,
                      5: 100,
                      6: 5.0,
                      7: 15.0,
                      8: 25.0,
                      9: 33.1,
                      10: 40.0}}}   


'''