python字典键错误?

python字典键错误?,python,dictionary,Python,Dictionary,我收到这个错误: Traceback (most recent call last): File "/Users/Rose/Documents/workspace/METProjectFOREAL/src/test_met4.py", line 79, in <module> table_list.append(table_template % art_temp_dict) KeyError: 'artifact4' 以下是CSV的示例: “工件4971.jpg”,

我收到这个错误:

Traceback (most recent call last):
  File "/Users/Rose/Documents/workspace/METProjectFOREAL/src/test_met4.py", line 79, in   <module>
    table_list.append(table_template % art_temp_dict)
KeyError: 'artifact4'
以下是CSV的示例:

“工件4971.jpg”,“高17 1/2 x 16 1/2 x 5 1/2英寸(44.5 x 41.9 x 14厘米)”,“74.51.2648”,“4971” “人造物4972.jpg”,“总尺寸:51/2x3/4x4英寸(14.0x9.5x10.2厘米)”,“74.51.2592”,“4972” “工件4973.jpg”,“整体尺寸:65/8x71/4x11/4in.(16.8x18.4x3.2cm)”,“74.51.2594”,“4973” “人工制品4974.jpg”、“高51/2x63/4x113/4in.(14x17.1x29.8cm)”、“74.51.2628”、“4974” “工件4975.jpg”,“整体:10 1/8 7英寸(25.7厘米)”,“74.51.2633”,“4975” “工件4976.jpg”,“总尺寸:71/251111/2英寸(19.1129.2厘米)”,“74.51.2637”,“4976” “工件4977.jpg”,“总尺寸:101/2781/2in.(26.717.821.6cm)”,“74.51.2819”,“4977” “人造物4978.jpg”,“高6 3/8 x 14 1/2 x 5 1/4英寸(16.2 x 36.8 x 13.3厘米)”,“74.51.2831”,“4978”


我知道KeyError表示“artifact4”不存在,但我不知道为什么——我从一个包含近6000条记录的大型CSV文件中获取数据。非常感谢您的任何建议

如果CSV的第四列的值与前面的一列的值相同,则
索引
将生成前面的匹配项,并且永远不会填充
工件4
。改用这个:

 for i, artifact in enumerate(artifact_group):
     art_temp_dict["artifact"+str(i+1)] = artifact

通过使用而不是使用
csv.reader
,然后尝试从每一行生成
dict
,您可以使这一过程简单得多:

>>> s='''"artifact4971.jpg","H. 17 1/2 x 16 1/2 x 5 1/2 in. (44.5 x 41.9 x 14 cm)","74.51.2648","4971"
... "artifact4972.jpg","Overall: 5 1/2 x 3 3/4 x 4 in. (14.0 x 9.5 x 10.2 cm)","74.51.2592","4972"
... "artifact4973.jpg","Overall: 6 5/8 x 7 1/4 x 1 1/4 in. (16.8 x 18.4 x 3.2 cm)","74.51.2594","4973"'''
>>> reader = csv.DictReader(s.splitlines(), 
...                         ('artifact1', 'artifact2', 'artifact3', 'artifact4'))
>>> list(reader)
[{'artifact1': 'artifact4971.jpg',
  'artifact2': 'H. 17 1/2 x 16 1/2 x 5 1/2 in. (44.5 x 41.9 x 14 cm)',
  'artifact3': '74.51.2648',
  'artifact4': '4971'},
 {'artifact1': 'artifact4972.jpg',
  'artifact2': 'Overall: 5 1/2 x 3 3/4 x 4 in. (14.0 x 9.5 x 10.2 cm)',
  'artifact3': '74.51.2592',
  'artifact4': '4972'},
 {'artifact1': 'artifact4973.jpg',
  'artifact2': 'Overall: 6 5/8 x 7 1/4 x 1 1/4 in. (16.8 x 18.4 x 3.2 cm)',
  'artifact3': '74.51.2594',
  'artifact4': '4973'}]

如果你真的想自己构建每一行的dict,那么如果你使用dict理解,就很难出错

声明性结构强烈鼓励您正确地考虑这一点。如果你知道,你可能会这样写:

 art_temp_dict={'artifact'+str(i+1): artifact
                for i, artifact in enumerate(artifact_group)}
…如果不是,像这样的东西更难看,但仍然正确:

 art_temp_dict={'artifact'+str(i+1): artifact_group[i]
                for i in len(artifact_group)}

…而不是试图通过搜索来恢复索引。

artifact\u组。索引(artifact)+1可能是您的问题。尝试删除
+1
。如果没有csv,则无法知道。打印出
“工件”+str(工件组索引(工件)+1)
并查看是否存在
工件4
。可能没有。
KeyError
表示这6000条记录中的一条不存在
artifact4
。如果您想调试它,第一步是看哪一个。例如,如果您只是在
For
循环中打印(工件组)
。在异常之前最后一个被打印出来的是有问题的。很好地解释了为什么它可能失败。更一般地说,您几乎不应该尝试通过搜索来恢复索引。如果你已经有了索引,就用它吧。如果您还没有,请使用
枚举
,现在就可以了。
 art_temp_dict={'artifact'+str(i+1): artifact_group[i]
                for i in len(artifact_group)}