# Passing a list into runScript() expression binding

**URL:** <https://forum.inductiveautomation.com/t/passing-a-list-into-runscript-expression-binding/106125>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [May 10, 2025, 2:07pm UTC](https://forum.inductiveautomation.com/t/passing-a-list-into-runscript-expression-binding/106125 "2025-05-10T14:07:22Z")\
**Posts on this page:** 6\
**Page:** 2

<div class="post-metadata">

**Author:** ![Ryan\_Deardorff](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan_deardorff/32/63815_2.png) [@Ryan\_Deardorff](https://forum.inductiveautomation.com/u/Ryan_Deardorff)\
**Post date:** [May 12, 2025, 2:10pm UTC](https://forum.inductiveautomation.com/t/passing-a-list-into-runscript-expression-binding/106125/22 "2025-05-12T14:10:39Z")

</div>

> [@pturmel](#):
>
> `dict([(k, qv.value) for (k, qv) in dictOfQV.items()])`

Given @pturmel's feedback, I think I'll update my library to a single function:

```python
def unQualify(qvObject):
	if qvObject is None:
		return None
	if isinstance(qvObject, list):
		return [val.value for val in qvObject]
	elif isinstance(qvObject, dict):
		return dict([(k, qv.value) for (k, qv) in qvObject.items()])

```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [May 12, 2025, 2:25pm UTC](https://forum.inductiveautomation.com/t/passing-a-list-into-runscript-expression-binding/106125/23 "2025-05-12T14:25:29Z")

</div>

> [@Ryan\_Deardorff](#):
>
> library to a single function

Not a bad plan, but that implementation will not handle java implementations of lists and dictionaries. Consider checking for the items method (via `hasattr()`) to trigger dictionary handling, then iterating over the rest. (Duck typing is more reliable than `isinstance()`.

---

<div class="post-metadata">

**Author:** ![Ryan\_Deardorff](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan_deardorff/32/63815_2.png) [@Ryan\_Deardorff](https://forum.inductiveautomation.com/u/Ryan_Deardorff)\
**Post date:** [May 12, 2025, 2:41pm UTC](https://forum.inductiveautomation.com/t/passing-a-list-into-runscript-expression-binding/106125/24 "2025-05-12T14:41:59Z")

</div>

Thanks, that explains why it wasn't working. This does:

```python
def unQualify(qvObject):
	if qvObject is None:
		return None
	if hasattr(qvObject, 'items'):
		return dict([(k, qv.value) for (k, qv) in qvObject.items()])
	else:
		return [val.value for val in qvObject]

```

---

<div class="post-metadata">

**Author:** ![pascal.fragnoud](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pascal.fragnoud/32/24728_2.png) [@pascal.fragnoud](https://forum.inductiveautomation.com/u/pascal.fragnoud)\
**Post date:** [May 12, 2025, 2:52pm UTC](https://forum.inductiveautomation.com/t/passing-a-list-into-runscript-expression-binding/106125/25 "2025-05-12T14:52:54Z")

</div>

> [@Ryan\_Deardorff](#):
>
> ```python
> return dict([(k, qv.value) for (k, qv) in qvObject.items()])
> 
> ```

You don't need the brackets, you can use a generator here. And if the java dicts implement `.iteritems` (I don't remember if they do), you could also use that, so no list is produced while you extract the value from the qv.

---

<div class="post-metadata">

**Author:** ![Ryan\_Deardorff](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan_deardorff/32/63815_2.png) [@Ryan\_Deardorff](https://forum.inductiveautomation.com/u/Ryan_Deardorff)\
**Post date:** [May 12, 2025, 3:04pm UTC](https://forum.inductiveautomation.com/t/passing-a-list-into-runscript-expression-binding/106125/26 "2025-05-12T15:04:07Z")

</div>

This does appear to work:

```python
def extractQualifiedValues(qvObject):
	if qvObject is None:
		return None
	if hasattr(qvObject, 'iteritems'):
		return dict((k, qv.value) for (k, qv) in qvObject.iteritems())
	else:
		return [val.value for val in qvObject]

```

I am interested in making it as efficient as possible, since that's the main reason for using `runScript`. Maybe one day I'll finally start using @pturmel's Toolkit...

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [May 12, 2025, 3:32pm UTC](https://forum.inductiveautomation.com/t/passing-a-list-into-runscript-expression-binding/106125/27 "2025-05-12T15:32:54Z")

</div>

Please don't call it `unQualify()`, as it is not a 1:1 replacement for mine. My toolkit recursively handles nested lists and dictionaries, with cycle detection to avoid infinite loops.

[Previous page](https://forum.inductiveautomation.com/t/passing-a-list-into-runscript-expression-binding/106125.md?page=1)
