在对象列表中的列表中查找字符串

时间:2017-06-07 13:57:09

标签: python python-3.x

我有一个带列表的对象列表:

ls = [
    {'id': 1, 'content': ['lorem', 'ipsum']},
    {'id': 1, 'content': ['dolor', 'sit', 'amet']},
]

我想获取对象的索引,例如'lorem'

到目前为止我试过了:

'lorem' in [x['content'] for x in ls]

这不会返回true,也不会返回索引。

3 个答案:

答案 0 :(得分:1)

此算法将关键字设置为字符串,然后搜索字典列表,以查看关键字是否存在关键字'内容的值。如果确实存在,则返回索引。如果没有,"未找到"归还。

keyword = "dolor"

ls = [
{'id': 1, 'content': ['lorem', 'ipsum']},
{'id': 1, 'content': ['dolor', 'sit', 'amet']},
]

indices = [i['content'].index(keyword) if keyword in i['content'] else "not found" for i in ls]

编辑:

找到没有"未找到"的索引的另一种方法声明可以在下面完成:

 [i['content'].index(keyword) for i in ls if keyword in i['content']]

答案 1 :(得分:0)

ls.index([x for x in ls if 'lorem' in x['content']][0])
这种oneline风格具有如下结果:

t = []
for x in ls:
    if 'lorem' in x['content']:
        t.append(x)
ls.index(t[0])

在我的机器上,输出为:

>>> ls.index([x for x in ls if 'lorem' in x['content']][0])
0
>>> ls.index([x for x in ls if 'ipsum' in x['content']][0])
0
>>> ls.index([x for x in ls if 'dolor' in x['content']][0])
1
>>> ls.index([x for x in ls if 'sit' in x['content']][0])
1

答案 2 :(得分:0)

我愿意:

 >>> tgt='ipsum'
 >>> [(x, di['content'].index(tgt)) for x, di in enumerate(ls) if tgt in di['content']]
 [(0, 1)]
 >>> tgt='amet'
 >>> [(x, di['content'].index(tgt)) for x, di in enumerate(ls) if tgt in di['content']]
 [(1, 2)]

这假设带有['content']的词典位于词典列表中。