如何检查列表是否作为列表成员(字典列表)中的值存在?
totalList = ([{'score': 1, 'item': ['text1', 'text2']},
{'score': 2, 'item': ['text3', 'text4']},
{'score': 3, 'item': ['text5', 'text6']}])
redList = ['text1', 'text2']
像这样的单行(虽然这个因为显而易见的原因不起作用)。我想避免循环。
if redList in totalList:
print("True")
上下文:
redlists = a list of lists
totalList = []
for redlist in redlists:
if redlist not in totalList:
totalList.append(dictionary_item))
示例ditcionary_item
= {'score': 1, 'item': ['text1', 'text2']}
注意:总列表不断增长,因为每次redList不在totalList中时,我会根据预定义的条件向toalList添加一个新的字典。
答案 0 :(得分:2)
any(d['item'] == redList for d in totalList)
redList in map(itemgetter('item'), totalList)
编辑:或者只是一个生成器表达式(类似于Leandro' s,但更节省空间,也许更节省时间,因为它在第一次发现时停止):
redList in (d['item'] for d in totalList)
答案 1 :(得分:1)
试试这个
if redList in [x.get('item') for x in totalList]:
print("True")`
答案 2 :(得分:1)
如果您经常需要此检查,将列表转换为元组可能是值得的。这样,它们就会变为hashable,并且可以保存在set
:
totalList = [{'score': 1, 'item': ['text1', 'text2']},
{'score': 2, 'item': ['text3', 'text4']},
{'score': 3, 'item': ['text5', 'text6']}]
items = {tuple(d['item']) for d in totalList}
print(items)
# {('text3', 'text4'), ('text1', 'text2'), ('text5', 'text6')}
redList = ['text1', 'text2']
print(tuple(redList) in items)
# True
您只需要迭代一次即可创建该集合。每次检查都会很快,不需要任何循环。
如果你想获得相应的分数,你可以将元组保存在dict中:
scores = {tuple(d['item']):d['score'] for d in totalList}
print(scores)
# {('text1', 'text2'): 1, ('text3', 'text4'): 2, ('text5', 'text6'): 3}
print(scores.get(tuple(redList), 0))
# 1
print(scores.get(tuple(['a', 'b']), 0))
# 0
答案 3 :(得分:1)
您可以使用filter
:
redList = ['text1', 'text2']
totalList = ([{'score': 1, 'item': ['text1', 'text2']},
{'score': 2, 'item': ['text3', 'text4']},
{'score': 3, 'item': ['text5', 'text6']}])
if list(filter(lambda x:x["item"] == redList, totalList)):
print('redList in totalList')