摘要:我有一个列表
list = [
{
'id': '1',
'elements': 'A',
'table': 'maps/partials/a.html',
'chart': 'maps/partials/charts/a.html',
},
{
'id': '2',
'elements': 'B',
'table': 'maps/partials/census/b.html',
'chart': 'maps/partials/charts/b.html',
},
{
'id': '3',
'elements': ('C','D','E','F'), //i believe it is wrong
'table': 'maps/partials/census/common.html',
'chart': 'maps/partials/charts/common.html',
},]
some_arr = ['E','2011','English','Total']
我想将elements
与some_arr
中的项目进行比较。
我这样做是为了得到列表并将其与some_arr进行比较。
for data in list:
for i in range(len(some_arr)):
if data['elements'] == some_arr[i]:
print(data['id'])
正如您在'id':3
中所看到的,section_title有4个值。我如何将这里的元素与some_arr进行比较。
答案 0 :(得分:4)
如果您想找到任何匹配项:
lst = [
{
'id': '1',
'elements': 'A',
'table': 'maps/partials/a.html',
'chart': 'maps/partials/charts/a.html',
},
{
'id': '2',
'elements': 'B',
'table': 'maps/partials/census/b.html',
'chart': 'maps/partials/charts/b.html',
},
{
'id': '3',
'elements': ('C','D','E','F'),
'table': 'maps/partials/census/common.html',
'chart': 'maps/partials/charts/common.html',
}]
some_arr = ['E','2011','English','Total']
st = set(some_arr)
from collections import Iterable
for d in lst:
val = d["elements"]
if isinstance(val, Iterable) and not isinstance(val, str):
if any(ele in st for ele in val):
print(d["id"])
else:
if val in st:
print(d["id"])
在some_arr
中创建一组所有元素将为您提供O(1)
次查找,使用isinstance(val, Iterable) and not isinstance(val, str)
将捕获任何可迭代的值,如列表,元组等。并避免迭代"F"
中"Foo"
可能会给您带来误报的字符串。
any会在第一场比赛中短路,所以如果你真的想为每场比赛打印id,那么请使用for循环。最后,如果您使用的是python2,请使用basestring
代替str
。
答案 1 :(得分:2)
您可以使用set.intersection
来获取它们之间的交集,但在您需要检查它是否为元组之前,请使用intersection
。
同样在第一种情况下,您可以使用in
检查成员身份,以检查data['elememnt']
中是否some_arr
然后打印data['id']
:
for data in list:
d=data['elements']
if isinstance(d,tuple):
if set(d).intersection(some_arr):
print(data['id'])
if d in some_arr:
print(data['id'])