如何在词典列表中拆分词典字符串值以添加新的词典项目?

时间:2019-04-05 08:04:29

标签: python dictionary split

我有一个字典列表,每个列表中都有一个名为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:列表索引超出范围

我该怎么做?

7 个答案:

答案 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 ''
    ...:
    ...: