I wrote an article about the creation of a REST service that maybe can help you.

https://community.intersystems.com/post/creating-rest-service-iris

You can check the ClassMethod TestPost where a data is received from a post call and is sent finally to a business operation where is transformed into a DynamicObject and parsed to another class. This is the business operation:

Class WSTEST.BO.PersonSaveBO Extends EnsLib.REST.Operation
{

Parameter INVOCATION = "Queue";

Method savePerson(pRequest As WSTEST.Object.PersonSaveRequest, Output pResponse As WSTEST.Object.PersonSaveResponse) As %Status
{
	try {
      set person = ##class("WSTEST.Object.Person").%New()
      #dim request as %DynamicObject = {}.%FromJSON(pRequest.JSON)
      set person.PersonId = request.PersonId
      set person.Name = request.Name
      set person.LastName = request.LastName
      set person.Sex = request.Sex
      set person.Dob = request.Dob

      set tSC = person.%Save()
      set pResponse = ##class("WSTEST.Object.PersonSaveResponse").%New()
      set pResponse.PersonId = person.PersonId
      set pResponse.Name = person.Name
      set pResponse.LastName = person.LastName
      set pResponse.Sex = person.Sex
      set pResponse.Dob = person.Dob
      
   }catch{
       Set tSC="Error saving the person"
   }
   Quit tSC
}

XData MessageMap
{
<MapItems>
  <MapItem MessageType="WSTEST.Object.PersonSaveRequest">
    <Method>savePerson</Method>
  </MapItem>
</MapItems>
}

}

UserTable and DataTable are related? I'm guessing that if Condition1 is the relation between the tables you would try this query:

SELECT 
    COUNT(CASE WHEN data.a = "Condition1" then 1 ELSE NULL END) as "ValueA", 
    COUNT(CASE WHEN data.b = "Condition2" then 1 ELSE NULL END) as "ValueB", 
    COUNT(CASE WHEN data.c = "Condition3" then 1 ELSE NULL END) as "ValueC", 
user.id
 FROM UserTable user left join DataTable data on user.id = data.user

You can send the List by reference to the Python method, populate it inside the method and use the populated list from the objectscript who call it.

Something like this:

set listOfStrings = ##class("%Library.ListOfDataTypes").%New()
do ..TestPython(listOfStrings)
$$$TRACE("What a beautiful trace! There are "_listOfStrings.Count()_" element(s)")
...
...
ClassMethod TestPython(ByRef listOfStrings As %List) [ Language = python ]
{

	import iris
	
	
	listOfStrings.Insert("One")
	listOfStrings.Insert("Two")
	listOfStrings.Insert("Three")
	
	return 1
}