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

3

我有一个列表:

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

我的变量字符串中包含一个存在于列表中的字符串,但是我收到了“字符串不存在于列表中”的消息。

你明白为什么会这样吗?


如果你想找到你的“string”值,请使用以下代码:if string in test.values():。目前,你正在迭代字典的键而不是值。 - undefined
if any(d['TopicArn'] == 'arn:aws:sns:us-east-1:700257:test4' for d in test): - undefined
我会使用一个元组列表来实现这个目的,而不是使用字典列表。 - undefined
测试包含了一个字典列表,其中包含了键值对。 - undefined
5个回答

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

谢谢你的回答。我根据你的提示更新了我的问题,但问题仍然存在! - undefined
1
我没有给你点踩,但对于一个外行来说,那个字符串确实在test里面。你并没有解释你所说的"不是其中之一"是什么意思。 - undefined
@techman 你现在正在寻找一个表示字典的字符串,但是test包含的是字典本身,而不是它们的字符串表示。如果你去掉外面的引号"",它应该可以工作。 - undefined
@dimo414 是的,同意,这就是为什么我加了最后一部分解释的原因。 - undefined

3
Python的in函数不是像那样工作的。您需要先将您的test转换成字符串列表或集合:
test2 = set([x['TopicArn'] for x in test])

感谢您的答案。您的解决方案运行良好! - undefined
你需要添加 if x['TopicArn']==stringvalue - undefined

2
你有一个字典列表,试试这个方法:
```python ```
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")

1
因为列表中包含字典,所以您需要遍历列表并检查字符串是否在字典值中。
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个答案。 - undefined

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接