You can write custom Python code to interact with components and queries. To do that, you need to create a new query and select **Run Python code** from the available data sources.
- The above code has a function `myfunc` which returns a string and we are using a **[Component Specific Action](/docs/tooljet-concepts/component-specific-actions)** to set the Text Component's value from the Python query.
**Run Python code** can be used to transform the data that is fetched in the queries. To test transformations using Python, create a new `REST API` query, leave the method as `GET` and enter the below url under the `URL` property.
```js
https://dummyjson.com/products
```
Click on the **Run** button and check the preview of the returned data, below is the data structure of the response:
```js
products_data = {
"products": [
{"title": "iPhone 9", ...},
{"title": "iPhone X", ...},
# Additional products...
]
}
```
#### Filter the titles from the response
To extract a list of product titles from the given data structure, we iterate through the `products` list and collect each product's `title` using the below code. Enable `Transformations` in the Query Editor and use the below code:
```python
return [product["title"] for product in data["products"]]
```
### Filtering Products by Category
To filter products by a specific category, such as "smartphones", and extract their titles. Enable `Transformations` in the Query Editor and use the below code:
```python
return [product["title"] for product in data["products"] if product["category"] == "smartphones"]
```
### Calculating Average Price of a Category
To calculate the average price of products within the "laptops" category. Enable `Transformations` in the Query Editor and use the below code:
```python
return sum(product["price"] for product in data["products"] if product["category"] == "laptops") / len([product for product in data["products"] if product["category"] == "laptops"]) if len([product for product in data["products"] if product["category"] == "laptops"]) > 0 else 0
Just like other dynamic values, you can refer the data returned by **Run Python code** queries using double curly braces`{{}}`.
For instance, if you have a **Run Python code** query named *updatedProductInfo*, you can pass `{{queries.updatedProductInfo.data}}` under the `Data` property of a Table component to populate it with the data returned by the *updatedProductInfo* query.