我有一个清单:
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;。
你明白为什么吗?
答案 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'}]