KeyError:0; Python从列表中删除列

use*_*337 3 python

我有一个函数我写的从2D列表中删除列(从CSV上传):

#method to remove a column from a list if it does not contain an int
def remove_nonint(list):
    for row in list:
        for i in range(0, len(row)):
            if isinstance(row[i], ( int, long ) ) != True:  
                del row[i]
Run Code Online (Sandbox Code Playgroud)

但是,当我在列表上运行它时,我收到以下错误:

<ipython-input-23-10a39a11efb3> in remove_nonint(list)
      3     for row in list:
      4         for i in range(0, len(row)):
----> 5             if isinstance(row[i], ( int, long ) ) != True:
      6                 del row[i]

KeyError: 0
Run Code Online (Sandbox Code Playgroud)

list [0]看起来像这样:

{u'2B': 0,
 u'3B': 0,
 u'AB': 4,
 u'BB': 0,
 u'CS': 0,
 u'G': 1,
 u'GIDP': None,
 u'H': 0,
 u'HBP': None,
 u'HR': 0,
 u'IBB': None,
 u'R': 0,
 u'RBI': 0,
 u'SB': 0,
 u'SF': None,
 u'SH': None,
 u'SO': 0,
 u'lgID': u'NA',
 u'playerID': u'abercda01',
 u'stint': u'1',
 u'teamID': u'TRO',
 u'yearID': u'1871'}
Run Code Online (Sandbox Code Playgroud)

编辑:这是我上传CSV的方式:

import unicodecsv

with open('lahman-csv_2015-01-24/batting.csv', 'rb') as f:
    reader = unicodecsv.DictReader(f)
    batting = list(reader)

batting[0]
Run Code Online (Sandbox Code Playgroud)

Jon*_*sky 5

row 是一个字典,而不是一个列表,所以它不一定在索引0处有任何东西.在这种情况下,如你所见,它没有.

迭代dict的通常方法是

for key in some_dict: 或者 for key, val in some_dict.items(): 如果您希望检查存储在的值key,并且您希望给它命名而不是引用some_dict [val],则后一种形式很有用,这可能很麻烦.

在这种情况下,我会做这样的事情:

for row in list:
    for key, val in row.items():
        if not isinstance(val, ( int, long ) ):
             del row[key]
Run Code Online (Sandbox Code Playgroud)