Hi @jono
The python code provided below will for every feature look for the list. For the first element it will get all attributes and the values of these attributes and store them in a dictionary. Next the code will loop through all attributes of every list element and if the value differs from the value of the first element, the attribute name is listed in the attribute 'attribute_with_different_values'.

import fme
import fmeobjects
import re
class FeatureProcessor(object):
def __init__(self):
self.name_list = '_list'
def input(self,feature):
attributes = feature.getAllAttributeNames()
# Keep only those attributenames linked to the first feature of the list and only keep the
# name of the attribute itself
attributes_to_compare = [re.search('(?<=\.).*$', x).group(0) for x in attributes if re.search('\{0\}\.', x)]
# Store those attributenames in a dictionary having the value of the attribute as value
attributes_first_element = {}
for cAttribute in attributes_to_compare:
attributes_first_element[cAttribute] = feature.getAttribute("{}{{0}}.{}".format(self.name_list, cAttribute))
# Now loop through all attributes for all features and check which of them have a different value
attributes_with_different_values = set()
attributes = [x for x in attributes if re.search('\{\d+\}\.', x)]
for cAttribute in attributes:
value = feature.getAttribute(cAttribute)
name_attribute = re.search('(?<=\.).*$', cAttribute).group(0)
if value != attributes_first_element[name_attribute]:
attributes_with_different_values.add(name_attribute)
# Store all the attributes that have different values in one attribute to export
feature.setAttribute('attribute_with_different_values', ','.join(attributes_with_different_values))
self.pyoutput(feature)
def close(self):
pass