没有按预期索引的元组列表

时间:2014-08-12 16:05:10

标签: python django

我有以下元组列表:

[(2010, u'S03', u'AA26FedGovAccounts', 1.90537034315564, 46385659904.0), (2010, u'S03', u'AA27StLocGovAccounts', 1.5897291595379, 58351759360.0), (2010, u'S03', u'AA28CapitalAccounts', 1.79050465110027, 95550709760.0)]

当我使用:viewData[:][:]时,它按预期工作并输出所有数据 当我使用:viewData[2][2]时,它正常工作并输出'AA28CapitalAccounts' 问题是viewData[2][:]viewData[:][2]都给了我相同的结果:(2010, u'S03', u'AA28CapitalAccounts', 1.79050465110027, 95550709760.0)。我希望viewData[:][2]能够为我提供u'AA26FedGovAccounts'u'AA27StLocGovAccounts'u'AA28CapitalAccounts'的列表。

这是使用Django在网络服务器上运行的。代码是:

c = connections['default'].cursor()
c.execute("SELECT * FROM {0}.\"{1}\"".format(analysis_schema, viewName))
viewData=c.fetchall()
values = { curDesc[2][0] : str(viewData[:][2]) }

3 个答案:

答案 0 :(得分:1)

对于viewData [2] [:]

viewData[2] 

返回外部列表中的第三个元素:

(2010, u'S03', u'AA28CapitalAccounts', 1.79050465110027, 95550709760.0)

然后[:]部分返回所有元组:


适用于viewData [:] [2]

viewData[:]

返回整个外部列表

然后[2]部分返回第三个元素:

(2010, u'S03', u'AA28CapitalAccounts', 1.79050465110027, 95550709760.0)

与其他方法相同。


由于[:]返回一个包含每个元素的列表,因此您实际上并没有关闭任何内容,只是获取与以前相同的列表。

Here关于Python的切片符号是一个有用的一般性问题。

答案 1 :(得分:1)

他们两个显然会返回相同的值。

viewData [:] [2]不会给出'AA26FedGovAccounts','AA27StLocGovAccounts'和'AA28CapitalAccounts'的列表,而是需要迭代列表。 @iwin很好地解释了原因。

以下代码是您所需要的:

[item[2] for item in viewData]

答案 2 :(得分:0)

我认为你缺少numpy数组的列表。 如果所有子列表的大小相同,则可以将列表转换为数组:

>>> import numpy as np
>>> tmp = [(2010, u'S03', u'AA26FedGovAccounts', 1.90537034315564, 46385659904.0),
           (2010, u'S03', u'AA27StLocGovAccounts', 1.5897291595379, 58351759360.0),
           (2010, u'S03', u'AA28CapitalAccounts', 1.79050465110027, 95550709760.0)]
>>> viewData = np.array(tmp)

# Column-wise
>>> print viewData[:, 2]
[u'AA26FedGovAccounts' u'AA27StLocGovAccounts' u'AA28CapitalAccounts']

# Row-wise
>>> print viewData[2, :] # same as print viewData[2]
[u'2010' u'S03' u'AA28CapitalAccounts' u'1.7905046511' u'95550709760.0']

请注意语法:viewData[:, 2]而非viewData[:][2]