我有一个项目清单 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'}]]
