# Conventional Hello World in Jython
print "Hello World!"
def flatten_with_path(obj):
"""
Flatten a nested structure (dicts, lists, or variables) into a list of tuples
with each tuple containing the value and its path in the original structure.
"""
flattened = []
# Helper function to recursively flatten with path
def _flatten_helper(item, path):
if isinstance(item, dict):
for key, value in item.items():
_flatten_helper(value, path + [key])
elif isinstance(item, list):
for index, value in enumerate(item):
_flatten_helper(value, path + [index])
else:
flattened.append((item, path))
# Call the helper function to start the recursion
_flatten_helper(obj, [])
return flattened
nested_data = [
{
"name": "John",
"age": 30,
"children": [
{"name": "Alice", "age": 5},
{"name": "Bob", "age": 8}
]
},
["apple", "banana", ["orange", "grape"]],
"hello"
]
flatten_with_path(nested_data)
IyBDb252ZW50aW9uYWwgSGVsbG8gV29ybGQgaW4gSnl0aG9uCnByaW50ICJIZWxsbyBXb3JsZCEiCgpkZWYgZmxhdHRlbl93aXRoX3BhdGgob2JqKToKICAgICIiIgogICAgRmxhdHRlbiBhIG5lc3RlZCBzdHJ1Y3R1cmUgKGRpY3RzLCBsaXN0cywgb3IgdmFyaWFibGVzKSBpbnRvIGEgbGlzdCBvZiB0dXBsZXMKICAgIHdpdGggZWFjaCB0dXBsZSBjb250YWluaW5nIHRoZSB2YWx1ZSBhbmQgaXRzIHBhdGggaW4gdGhlIG9yaWdpbmFsIHN0cnVjdHVyZS4KICAgICIiIgogICAgZmxhdHRlbmVkID0gW10KCiAgICAjIEhlbHBlciBmdW5jdGlvbiB0byByZWN1cnNpdmVseSBmbGF0dGVuIHdpdGggcGF0aAogICAgZGVmIF9mbGF0dGVuX2hlbHBlcihpdGVtLCBwYXRoKToKICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIGRpY3QpOgogICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVtLml0ZW1zKCk6CiAgICAgICAgICAgICAgICBfZmxhdHRlbl9oZWxwZXIodmFsdWUsIHBhdGggKyBba2V5XSkKICAgICAgICBlbGlmIGlzaW5zdGFuY2UoaXRlbSwgbGlzdCk6CiAgICAgICAgICAgIGZvciBpbmRleCwgdmFsdWUgaW4gZW51bWVyYXRlKGl0ZW0pOgogICAgICAgICAgICAgICAgX2ZsYXR0ZW5faGVscGVyKHZhbHVlLCBwYXRoICsgW2luZGV4XSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBmbGF0dGVuZWQuYXBwZW5kKChpdGVtLCBwYXRoKSkKCiAgICAjIENhbGwgdGhlIGhlbHBlciBmdW5jdGlvbiB0byBzdGFydCB0aGUgcmVjdXJzaW9uCiAgICBfZmxhdHRlbl9oZWxwZXIob2JqLCBbXSkKCiAgICByZXR1cm4gZmxhdHRlbmVkCiAgICAKbmVzdGVkX2RhdGEgPSBbCiAgICB7CiAgICAgICAgIm5hbWUiOiAiSm9obiIsCiAgICAgICAgImFnZSI6IDMwLAogICAgICAgICJjaGlsZHJlbiI6IFsKICAgICAgICAgICAgeyJuYW1lIjogIkFsaWNlIiwgImFnZSI6IDV9LAogICAgICAgICAgICB7Im5hbWUiOiAiQm9iIiwgImFnZSI6IDh9CiAgICAgICAgXQogICAgfSwKICAgIFsiYXBwbGUiLCAiYmFuYW5hIiwgWyJvcmFuZ2UiLCAiZ3JhcGUiXV0sCiAgICAiaGVsbG8iCl0KZmxhdHRlbl93aXRoX3BhdGgobmVzdGVkX2RhdGEpCg==