如何从列表中检索值:python

时间:2015-07-27 18:50:29

标签: python python-3.x

摘要:我有一个列表

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

我想将elementssome_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进行比较。

2 个答案:

答案 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'])