检查列表中是否存在字符串

时间:2015-05-12 17:59:23

标签: 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'}]

我想检查上面列表中是否存在字符串。

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")

我的变量字符串是一个字符串,它存在于列表中但是我得到了消息"字符串不存在于列表中#34;。

你明白为什么吗?

5 个答案:

答案 0 :(得分:6)

这是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'}

"arn:aws:sns:us-east-1:700257:test4"不是其中之一,in比较看起来并不深。

你可能想要做的是这样的事情:

if any(string in d.values() for d in test):

检查字符串是否在test中的一个词典的值中:

>>> string = "arn:aws:sns:us-east-1:700257:test4"
>>> string in test
False
>>> any(string in d.values() for d in test)
True

答案 1 :(得分:2)

Python in函数无法正常工作。您需要先将test转换为一个列表或一组字符串:

test2 = set([x['TopicArn'] for x in test])

答案 2 :(得分:2)

你有一个词典列表,试试这个:

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")

您真正想知道的是,该字符串是否是列表中某个词典中的值之一。

更多的pythonic单行作为评论:

if any(d['TopicArn'] == string for d in test):
    print("string in list")

答案 3 :(得分:1)

因为列表中有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")

如果您只是问if string in test,它会检查"arn:aws:sns:us-east-1:700257:test4"中某个元素中的字符串list。那不是真的。

答案 4 :(得分:0)

使用列表理解并比较模式匹配的值。

 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'}]