我有一个字典列表,每个列表中都有一个名为text的键,该键带有字符串值。我想向每本字典添加一个名为first_word的新项目,该项目是文本字符串的一部分,以获取代码。
例如,如果我有:
alist =[{'id':1, 'text':'Dogs are great'},
{'id':2, 'text':'Cats are great'},
'id':3, 'text':'Fish are smelly'}]
我想添加一个名为first_word的新字段:
alist =[{'id':1, 'text':'Dogs are great', 'first_word':'Dogs'},
{'id':2, 'text':'Cats are great', 'first_word':'Cats'},
'id':3, 'text':'Fish are smelly', 'first_word':'Fish'}]
下面我尝试使用的代码:
for ditem in alist:
ditem['first_word'] = ditem['text'].split()[0]
但是我收到错误:
IndexError:列表索引超出范围
我该怎么做?
答案 0 :(得分:1)
将空白字符传递给split
方法,例如:
for ditem in alist:
ditem['first_word'] = ditem['text'].split(' ', 1)[0]
在字符串很大的情况下,使用.split()
的第二个参数使拆分尽早停止。
答案 1 :(得分:0)
您的代码与错别字一样有效。您在第三项之前错过了{
。
Jupyter抛出了这个
File "<ipython-input-17-6aeaa3a052d5>", line 5
'id':3, 'text':'Fish are smelly'}]
^
SyntaxError: invalid syntax
只需修改
alist =[{'id':1, 'text':'Dogs are great'},
{'id':2, 'text':'Cats are great'},
{'id':3, 'text':'Fish are smelly'}]
for ditem in alist:
ditem['firstword']=ditem['text'].split()[0]
alist
输出:
[{'id': 1, 'text': 'Dogs are great', 'firstword': 'Dogs'},
{'id': 2, 'text': 'Cats are great', 'firstword': 'Cats'},
{'id': 3, 'text': 'Fish are smelly', 'firstword': 'Fish'}]
答案 2 :(得分:0)
您的词典中有错误。如果清单上缺少花括号,请查看第3行。
答案 3 :(得分:0)
MyObject object = ...; //your original object
MyObject spyObject = Mockito.spy(object);
Mockito.doReturn(/*your value*/).when(spyObject).getReader();
答案 4 :(得分:0)
您的列表中可能有一些字典,其“文本”为空。
您可以清理数据,或者在这种情况下,如果要忽略空文本并添加空的“ first_word”,则可以执行以下操作:
for ditem in alist:
ditem['first_word'] = ditem['text'].split()[0] if ditem['text'] else ''
答案 5 :(得分:0)
您提到的特定IndexError
仅应在尝试访问不存在的列表元素时发生。您只有一个列表访问权限(ditem['text'].split()
的列表输出,并且您尝试访问它的第一个元素,因此该列表必须为空。这恰好在ditem['text']
为空时发生,这使我们快速解决方案:检查它是否为空。
for ditem in alist:
t = ditem['text']
ditem['first_word'] = t.split()[0] if t else None
答案 6 :(得分:-1)
将缺失的括号放在一边,您的代码将在显示的输入上起作用。
您唯一会遇到list index out of range
异常的情况是text
为空:
In [11]: for ditem in alist:
...: ditem['first_word'] = ditem['text'].split()[0]
...:
IndexError: list index out of range
解决此问题的一种方法是显式处理空文本:
In [12]: for ditem in alist:
...: ditem['first_word'] = ditem['text'].split()[0] if ditem['text'] else ''
...:
...: