当前位置 : 主页 > 网络推广 > seo >

如何从列表中检索特定值:python

来源:互联网 收集:自由互联 发布时间:2021-06-16
我有一个项目清单 list = [{ 'id': '1', 'elements': 'A', 'table': 'path/to/table1', 'chart': 'path/to/chart1', }, { 'id': '2', 'elements': 'B', 'table': 'path/to/table2', 'chart': 'path/to/chart2', }, { 'id': '3', 'elements': 'C', 'ta
我有一个项目清单

list = [{
            'id': '1',
            'elements': 'A',
            'table': 'path/to/table1',
            'chart': 'path/to/chart1',
        },
        {
            'id': '2',
            'elements': 'B',
            'table': 'path/to/table2',
            'chart': 'path/to/chart2',
        },
        {
            'id': '3',
            'elements': 'C',
            'table': 'path/to/table3',
            'chart': 'path/to/chart3',
        },]

selectionsFromTable = [{('A','2011','Table','Total'),
                       ('C','2011','Bar','Total'),
                       ('B','Pie','2001','Total')}]

将list [‘elements’]与selectionsFromTable项进行比较,如果elem in selectionsFromTable == list [‘elements’],则将其各自的表或图表附加到arr [].
假设selectionsFromTable是从jquery获取的表单数据.项目的索引值和位置始终在此处更改.
我这样做.

arr = []
for data in list:
    if data['elements'] in selectionsFromTable: # Suggest condition here
        inner = []
        if 'Table' in selectionsFromTable:
            print("table")
            inner.append({'id': data['id'],
                          'section_title': data['elements'],
                          'tableorChart': data['table'],
                          })

        elif 'Bar' in selectionsFromTable or 'Pie' in selectionsFromTable :
            print("chart")
            inner.append({'id': data['id'],
                          'section_title': data['elements'],
                          'tableorChart': data['chart'],
                          })

        arr.append(inner)

我认为这是错误的,请在此提出我的逻辑.因为我的selectionsFromTable包含“表格”,所以我无法进入“elif”状态.

根据您提供的示例,以下检查不起作用 –

data['elements'] in selectionsFromTable

这是因为,selectionsFromTable包含集类型,而data [‘elements’]是一个字符串.您想要在selectionsFromTable中检查每个元素(集合)内部.

一个简单的方法 –

arr = []
for data in list:
    elem = next((s for s in selectionsFromTable if data['elements'] in s), None)
    if elem:
        inner = []
        if 'Table' in elem:
            print("table")
            inner.append({'id': data['id'],
                          'section_title': data['elements'],
                          'tableorChart': data['table'],
                          })

        elif ('Bar' in elem) or ('Pie' in elem):
            print("chart")
            inner.append({'id': data['id'],
                          'section_title': data['elements'],
                          'tableorChart': data['chart'],
                          })

        arr.append(inner)

主要变化是线 –

elem = next((s for s in selectionsFromTable if data['elements'] in s), None)

这样做是为了尝试在selectionsFromTable中获取数据[‘elements’]中的第一个元素,或者如果不存在这样的元素(即生成器表达式甚至不产生单个值),它将返回None.

然后在下一行中我们检查elem是否不是None然后在基于elem(而不是selectionsFromTable)之后执行类似的逻辑.

此外,您不应该使用list作为变量的名称,它最终将屏蔽list()内置函数,您将无法在同一脚本中使用它.

示例/演示 –

>>> list = [{
...             'id': '1',
...             'elements': 'A',
...             'table': 'path/to/table1',
...             'chart': 'path/to/chart1',
...         },
...         {
...             'id': '2',
...             'elements': 'B',
...             'table': 'path/to/table2',
...             'chart': 'path/to/chart2',
...         },
...         {
...             'id': '3',
...             'elements': 'C',
...             'table': 'path/to/table3',
...             'chart': 'path/to/chart3',
...         },]
>>>
>>> selectionsFromTable = [{'A','2011','Table','Total'},
...                        {'C','2011','Bar','Total'},
...                        {'B','Pie','2001','Total'}]
>>> arr = []
>>> for data in list:
...     elem = next((s for s in selectionsFromTable if data['elements'] in s), None)
...     if elem:
...         inner = []
...         if 'Table' in elem:
...             print("table")
...             inner.append({'id': data['id'],
...                           'section_title': data['elements'],
...                           'tableorChart': data['table'],
...                           })
...         elif ('Bar' in elem) or ('Pie' in elem):
...             print("chart")
...             inner.append({'id': data['id'],
...                           'section_title': data['elements'],
...                           'tableorChart': data['chart'],
...                           })
...         arr.append(inner)
...
table
chart
chart
>>> import pprint
>>> pprint.pprint(arr)
[[{'id': '1', 'section_title': 'A', 'tableorChart': 'path/to/table1'}],
 [{'id': '2', 'section_title': 'B', 'tableorChart': 'path/to/chart2'}],
 [{'id': '3', 'section_title': 'C', 'tableorChart': 'path/to/chart3'}]]
网友评论