Python 检查列表中是否存在字符串
我有一份清单:Python 检查列表中是否存在字符串,python,Python,我有一份清单: test = [{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test1'}, {u'TopicArn': u'arn:aws:sns:us-east-1:700257:test2'}, {u'TopicArn': u'arn:aws:sns:us-east-1:700257:test3'}, {u'TopicArn': u'arn:aws:sns:us-east-1:700257:test4'}] 我想检查上面的列表中是
test = [{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test1'},
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test2'},
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test3'},
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test4'}]
我想检查上面的列表中是否存在字符串
string = "{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test4'}"
if string in test:
print("string exist in list")
else:
print("string dont exist in list")
我的变量字符串是一个存在于列表中的字符串,但我收到消息“字符串不存在于列表中”
你明白为什么吗?因为你在列表中有
命令。
您必须遍历列表并检查字符串是否在dict值中
string = "arn:aws:sns:us-east-1:700257:test4"
for d in test:
if string in d.values():
print("string exist in list")
else:
print("string dont exist in list")
如果您在测试中询问如果字符串,它将检查列表中的一个元素中的字符串“arn:aws:sns:us-east-1:700257:test4”
。那不是真的。因为列表中有dicts
。
您必须遍历列表并检查字符串是否在dict值中
string = "arn:aws:sns:us-east-1:700257:test4"
for d in test:
if string in d.values():
print("string exist in list")
else:
print("string dont exist in list")
如果您在测试中询问如果字符串,它将检查列表中的一个元素中的字符串“arn:aws:sns:us-east-1:700257:test4”
。这不是真的。以下是测试中的四件事:
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test1'}
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test2'}
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test3'}
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test4'}
>>> string = "arn:aws:sns:us-east-1:700257:test4"
>>> string in test
False
>>> any(string in d.values() for d in test)
True
“arn:aws:sns:us-east-1:700257:test4”
不是其中之一,而且比较中的看起来并不深入
您可能想做的事情如下:
if any(string in d.values() for d in test):
检查字符串是否在测试中某个词典的值中:
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test1'}
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test2'}
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test3'}
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test4'}
>>> string = "arn:aws:sns:us-east-1:700257:test4"
>>> string in test
False
>>> any(string in d.values() for d in test)
True
以下是测试中的四件事:
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test1'}
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test2'}
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test3'}
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test4'}
>>> string = "arn:aws:sns:us-east-1:700257:test4"
>>> string in test
False
>>> any(string in d.values() for d in test)
True
“arn:aws:sns:us-east-1:700257:test4”
不是其中之一,而且比较中的看起来并不深入
您可能想做的事情如下:
if any(string in d.values() for d in test):
检查字符串是否在测试中某个词典的值中:
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test1'}
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test2'}
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test3'}
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test4'}
>>> string = "arn:aws:sns:us-east-1:700257:test4"
>>> string in test
False
>>> any(string in d.values() for d in test)
True
Python的in
函数不是这样工作的。您需要首先将测试转换为一个列表或一组字符串:
test2 = set([x['TopicArn'] for x in test])
Python的in
函数不是这样工作的。您需要首先将测试转换为一个列表或一组字符串:
test2 = set([x['TopicArn'] for x in test])
如果有词典列表,请尝试以下操作:
found = False
for adict in test:
if string in adict.values():
found = True
if not found:
print("string dont exist in list")
else:
print("string in list")
似乎您真正想知道的是字符串是否是列表中某个字典中的值之一
给出了一个更具python风格的单行线作为评论:
if any(d['TopicArn'] == string for d in test):
print("string in list")
如果有词典列表,请尝试以下操作:
found = False
for adict in test:
if string in adict.values():
found = True
if not found:
print("string dont exist in list")
else:
print("string in list")
似乎您真正想知道的是字符串是否是列表中某个字典中的值之一
给出了一个更具python风格的单行线作为评论:
if any(d['TopicArn'] == string for d in test):
print("string in list")
使用列表理解并比较模式匹配的值
test = [{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test1'},
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test2'},
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test3'},
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test4'}]
string = 'arn:aws:sns:us-east-1:700257:test4'
result=list(d for d in test if string in d.values())
print(result)
输出:
[{'TopicArn': 'arn:aws:sns:us-east-1:700257:test4'}]
使用列表理解并比较模式匹配的值
test = [{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test1'},
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test2'},
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test3'},
{u'TopicArn': u'arn:aws:sns:us-east-1:700257:test4'}]
string = 'arn:aws:sns:us-east-1:700257:test4'
result=list(d for d in test if string in d.values())
print(result)
输出:
[{'TopicArn': 'arn:aws:sns:us-east-1:700257:test4'}]
在test.values()中执行if字符串操作:
如果要查找字符串
值。从现在开始,您迭代字典的键而不是值。如果有(d['TopicArn']='arn:aws:sns:us-east-1:700257:test4'表示测试中的d):
为此,我将使用元组列表而不是dict列表。test包含一个字典列表,其中包含键/值对do如果test.values()中的字符串:
如果要查找字符串
值。目前为止,您正在迭代字典的键而不是值。如果有(d['TopicArn']=='arn:aws:sns:us-east-1:700257:test4'表示测试中的d):
为此,我将使用元组列表而不是dict列表。test包含一个带有键/值对的字典列表谢谢您的回答。我用你的提示更新了我的问题,但问题还在继续!我没有投反对票,但对于偶然的观察者来说,这个字符串在test
中。您没有解释“不是其中之一”的含义。@techman您现在正在查找表示词典的字符串,但test
包含词典,而不是它们的字符串表示形式。如果您删除导出的“
,它应该可以工作。@dimo414是的,同意,这就是为什么我添加了解释的最后一部分。谢谢您的回答。我用你的提示更新了我的问题,但问题还在继续!我没有投反对票,但对于偶然的观察者来说,这个字符串在test
中。您没有解释“不是其中之一”的含义。@techman您现在正在查找表示词典的字符串,但test
包含词典,而不是它们的字符串表示形式。如果您删除导出的“
,它应该会起作用。@dimo414是的,同意,这就是为什么我添加了解释的最后部分。这将打印出4个答案。这将打印出4个答案。谢谢您的回答。你的解决方案很有效!如果x['TopicArn']==stringvalue,您需要添加。谢谢您的回答。你的解决方案很有效!如果x['TopicArn']==stringvalue,则需要添加