My function desired_headers() removes tuples from "results" object which the first element in the tuple does NOT match any string in headers list. ['Fish', 'Dolphin']
from result1 object & ['Local Auth', 'bucket']
has been removed from result3.
Then it prints the index number and list of tuples as seen under current output below.
My aim is to "repack" the lists of tuples back together using my current output and store in an object.
headers2 = ['Group', 'Owner', 'Person in charge', 'Type of Service',
'Registered Care Categories*', 'Specialist Care Categories',
'Languages Spoken by Staff (other than English)','Single Rooms',
'Shared Rooms','Facilities & Service']
result1 = [['Group', 'MacIntyre'], ['Person in charge', ' Vivienne Donald (Manager)'],
['Type of Service', 'good'], ['Fish', 'Dolphin'], ['Shared Rooms', '4']]
result2 = [['Group', 'Jameseson'], ['Type of Service', 'bad'], ['Shared Rooms', '8']]
result3 = [['Group', 'MacIntyre'], ['Person in charge', ' Vivienne Donald (Manager)'],
['Type of Service', 'good'], ['Shared Rooms', '4'], ['Local Auth', 'bucket']]
results = [result1, result2, result3]
#Removes tuples which the first element in the tuple does not matcch any string in headers2 list
def desired_headers():
for index, z in enumerate(list(range(len(results)))):
for i in list(range(len(results[z]))):
if any(x in headers2 for x in results[z][i]):
print(index, results[z][i])
desired_headers()
Current Output:
0 ['Group', 'MacIntyre']
0 ['Person in charge', ' Vivienne Donald (Manager)']
0 ['Type of Service', 'good']
0 ['Shared Rooms', '4']
1 ['Group', 'Jameseson']
1 ['Type of Service', 'bad']
1 ['Shared Rooms', '8']
2 ['Group', 'MacIntyre']
2 ['Person in charge', ' Vivienne Donald (Manager)']
2 ['Type of Service', 'good']
2 ['Shared Rooms', '4']
Desired Output:
[[['Group', 'MacIntyre'],
['Person in charge', ' Vivienne Donald (Manager)'],
['Type of Service', 'good'],
['Shared Rooms', '4']],
[['Group', 'Jameseson'], ['Type of Service', 'bad'], ['Shared Rooms', '8']],
[['Group', 'MacIntyre'],
['Person in charge', ' Vivienne Donald (Manager)'],
['Type of Service', 'good'],
['Shared Rooms', '4']]]
You need something like this? This will group everything in a single list
# Removes tuples which the first element in the tuple does not matcch any string in headers2 list
def desired_headers():
grouped_elements = []
for index, z in enumerate(list(range(len(results)))):
inner_loop = []
for i in list(range(len(results[z]))):
if any(x in headers2 for x in results[z][i]):
inner_loop.append(results[z][i])
grouped_elements.append(inner_loop)
print(grouped_elements)
Try this
lv1 = [] # initialize an empty list which we will append to based on our criteria
for lst in results: # loop though each element of the list, which itself is a list
lv2 = []
for el in lst: # Same as above
if el[0] in headers2: # check if first element of the list exists in headers2
lv2.append(el)
lv1.append(lv2)
lv1
Or if you want a function
def desired_headers(list_of_lists, inclution_list):
lv1 = []
for lst in list_of_lists:
lv2 = []
for el in lst:
if el[0] in inclution_list:
lv2.append(el)
lv1.append(lv2)
return lv1
desired_headers(list_of_lists=[result1, result2, result3], inclution_list=headers2)
Or if you are familiar with list comprehentions
result = []
for lst in [result1, result2, result3]:
result.append([el for el in lst if el[0] in headers2])
result
You could do it with a list comprehension:
filtered = [ [sl for sl in r if sl[0] in headers2] for r in results ]
output:
print(filtered)
[
[
['Group', 'MacIntyre'],
['Person in charge', ' Vivienne Donald (Manager)'],
['Type of Service', 'good'],
['Shared Rooms', '4']
],
[
['Group', 'Jameseson'],
['Type of Service', 'bad'],
['Shared Rooms', '8']
],
[
['Group', 'MacIntyre'],
['Person in charge', ' Vivienne Donald (Manager)'],
['Type of Service', 'good'],
['Shared Rooms', '4']
]
]
If you have a lot of data, you may want to make a set out of headers2
to use in the list comprehension
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.