Skip to main content
Solved

Search list for values on multiple attributes


tva
Contributor
Forum|alt.badge.img+12
  • Contributor

Hi,

The listsearcher makes it possible to search in a list for a certain value on 1 Attribute.

Is it possible to do this (without listexploder) to search in a list for values on different attributes?

list example:

_names{0}.LC = Arabic

_names{0}.NA = Latin

_names{0}.PN = true

_names{1}.LC = Arabic

_names{1}.NA = Arabic

_names{1}.PN = true

 

I want to search in names list where PN = true & NA <> Latin and get that indexback. In this case it would be 1

If it's not possible in FME, how would I do this via python in FME then?

Best answer by david_r

For Python, do something like:

lc_list = feature.getAttribute('_names{}.LC'or []
na_list = feature.getAttribute('_names{}.NA'or []
pn_list = feature.getAttribute('_names{}.PN'or []
items = zip(lc_list, na_list, pn_list)
 
feature.setAttribute('found_index', -1)
for index, item in enumerate(items):
    if item[2] == 'true' and item[1] != 'Latin':
        feature.setAttribute('found_index'index)
        break

This will return the first found index in the attribute 'found_index'. The value will be -1 if not found. Depending on your testing it may be that you have to modify line 8 to read:

if item[2] == True and item[1] != 'Latin':

 

View original
Did this help you find an answer to your question?

5 replies

david_r
Celebrity
  • Best Answer
  • March 8, 2023

For Python, do something like:

lc_list = feature.getAttribute('_names{}.LC'or []
na_list = feature.getAttribute('_names{}.NA'or []
pn_list = feature.getAttribute('_names{}.PN'or []
items = zip(lc_list, na_list, pn_list)
 
feature.setAttribute('found_index', -1)
for index, item in enumerate(items):
    if item[2] == 'true' and item[1] != 'Latin':
        feature.setAttribute('found_index'index)
        break

This will return the first found index in the attribute 'found_index'. The value will be -1 if not found. Depending on your testing it may be that you have to modify line 8 to read:

if item[2] == True and item[1] != 'Latin':

 


ebygomm
Influencer
Forum|alt.badge.img+39
  • Influencer
  • March 8, 2023

Do you mean PN = true & LC <> Latin ? As this is true for both examples in your list


tva
Contributor
Forum|alt.badge.img+12
  • Author
  • Contributor
  • March 8, 2023
ebygomm wrote:

Do you mean PN = true & LC <> Latin ? As this is true for both examples in your list

Thanks for pointing this out. Adapted the question


ebygomm
Influencer
Forum|alt.badge.img+39
  • Influencer
  • March 8, 2023
tva wrote:

Thanks for pointing this out. Adapted the question

Then this line in the code just needs changing

if item[2] == 'true' and item[0] != 'Latin':

to

if item[2] == 'true' and item[1] != 'Latin':

 


david_r
Celebrity
  • March 8, 2023
tva wrote:

Thanks for pointing this out. Adapted the question

Thanks, fixed my original answer accordingly.


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings