0

我正在尝试从 dict 创建 csv,但收到以下错误。我最初有键名而不是索引号,但是当我添加多个字典值时会导致错误。

IndexError: tuple index out of range

代码:

#Create dict file to test
userInfoDict = {'orgID': '17', 'firstName': 'TestFirstName', 'lastName': 'TestLastName', 'emailAddress': 'test@test.com',
                    'phoneNumber': '1234567890', 'isoCountryCode': 'US'}, {'orgID': '27', 'firstName': 'TestFirstName2', 'lastName': 'TestLastName2', 'emailAddress': 'test2@test.com',
                    'phoneNumber': '5384537645', 'isoCountryCode': 'US'}


def create_csv(userInfoDict):
    import csv

    userInfo = open('userInfo.csv', 'w')

    for key in userInfoDict:
        if len(userInfoDict[0]) == 0:
            print('Not a valid user: No orgID')
            return None
        elif len(userInfoDict[1]) == 0:
            print('Not a valid user: No First Name')
            return None
        elif len(userInfoDict[3]) == 0 and len(userInfoDict[4]) == 0:
            print('Not a valid user: No Email or Phone')
            return None
        else:
            writer = csv.DictWriter(userInfo, fieldnames=userInfoDict.keys(), delimiter=',')
            #writer.writeheader()  # If you want to add header
            writer.writerow(userInfoDict)
        return

create_csv(userInfoDict)
4

2 回答 2

1

userInfoDict您提供的是两个tupledicts相当于: userInfoDict = ({'orgID': '17', 'firstName': 'TestFirstName', 'lastName': 'TestLastName', 'emailAddress': 'test@test.com','phoneNumber': '1234567890', 'isoCountryCode': 'US'}, {'orgID': '27', 'firstName': 'TestFirstName2', 'lastName': 'TestLastName2', 'emailAddress': 'test2@test.com', 'phoneNumber': '5384537645', 'isoCountryCode': 'US'} )

但是您正在尝试计算len(userInfoDict[3]). 它没有索引为 3 的元素,只有索引为 0 和 1。

于 2017-02-28T14:43:38.240 回答
0

那是因为您的 'userInfoDict' 是长度为 2 的元组。

len(userInfoDict)
2

但是您似乎试图在您的代码中访问不存在的 'userInfoDict[3]' 和 userInfoDict[4] 。

见下文

userInfoDict[0]
{'emailAddress': 'test@test.com',
'firstName': 'TestFirstName',
'isoCountryCode': 'US',
'lastName': 'TestLastName',
'orgID': '17',
'phoneNumber': '1234567890'}

userInfoDict[1]
{'emailAddress': 'test2@test.com',
'firstName': 'TestFirstName2',
'isoCountryCode': 'US',
'lastName': 'TestLastName2',
'orgID': '27',
'phoneNumber': '5384537645'}

所以任何超过 1 的索引都会让你摆脱索引错误

userInfoDict[2]
IndexError: tuple index out of range

请检查您的“userInfoDict”不是字典,它是一个元组。

于 2017-02-28T14:52:50.250 回答