Python中能否同时使用字符串与整数进行数组索引?
Python中字符串/整数能否用于数组索引?
先直接给你明确结论:
- 列表(也就是你说的“数组”)只能用整数索引——列表是有序的序列集合,必须用非负整数(或者负整数,用来从末尾倒着数)来访问元素,要是用字符串当索引,直接就会抛出
TypeError哦。 - 字典可以用整数、字符串这类不可变类型当键——字典是键值对结构,只要键是不可变的(比如整数、字符串、元组)都能用来取值,这也是你例子里
list_2的用法。
接下来看看你的代码问题:
你说list_2是个以整数ID为键的字典,比如这样:
list_2 = { 1000: {'iscrowd': 0, 'image_id': 438346, 'category_id': 1}, 1001: {'iscrowd': 0, 'image_id': 438345, 'category_id': 2} }
但你写的循环代码有个明显的错误:
i = 0 for id in list_2: list_1[i]['First'] = list_2[id]['First'] list_2[i]['Second'] = list_2[id]['Second'] # 这里会报错! i = i + 1
问题出在list_2[i]这一行:list_2的键是1000、1001这类ID,而i是从0开始的整数,字典里根本没有0、1这些键,运行起来肯定会抛出KeyError。
要是你的需求是把list_2里的每个值对应到list_1的对应位置,同时给list_2的每个元素加上Second字段,那可以这么改:
方式1:用enumerate遍历字典的键值对(更Pythonic)
# 如果list_1是空的,动态添加元素 list_1 = [] for idx, (id, item) in enumerate(list_2.items()): # 把list_2里的对应值放到list_1里 list_1.append({'First': item['category_id']}) # 这里假设你要取category_id当First的值,按需调整 # 给当前list_2的元素添加Second字段 item['Second'] = item['image_id'] # 同理,按需调整值
方式2:保持你原来的循环结构,修正键的使用
i = 0 for id in list_2: list_1[i]['First'] = list_2[id]['category_id'] # 别用list_2[i],要用遍历到的id来访问字典元素! list_2[id]['Second'] = list_2[id]['image_id'] i += 1
另外,要是你确实需要用字符串当索引,那别用列表,改用字典就行。比如list_1如果是字典,就可以用字符串(或者把ID转成字符串)当键:
list_1 = {} for id in list_2: list_1[str(id)] = {'First': list_2[id]['category_id']}
最后再划个重点:
- 列表只能用整数索引,字符串不行;
- 字典支持多种不可变类型当键;
- 你的代码核心错误是误用了字典的键,要用遍历到的
id而非循环变量i来访问list_2的元素。
内容的提问来源于stack exchange,提问作者sura25
相关产品推荐
相关产品推荐

