So I have a feature class of 5 fields that I'm looking at. I'm looking to compare 4 fields to 2 other fields. Essentially, if any of the first 4 fields match to the other 2 fields then I want to return a "YES" in a new field. If none of the 4 fields match the 2 fields, then I want to return a NO. I started typing this out in the field calculator, but I'm unsure if this is the most efficient method.
I'm a beginner at python, so here is my code below:
def TextValue(MATCH): if !JURIS! or !MGMT1! or !MGMT2! or !MGMT3! == !EDC_MGMT! or !EDC_JURIS!: return = "YES" elif: return = "NO"
Am I going about this the right way? Let me know if my question should be clarified.
a = [1, 2, 3, 4] b = [2, 4] sum([True for i in a if i in b]) 2
substitute the numbers for your field names. If the sum is > 0, then it is true, otherwise false
The only thing is that they're text fields. Unless I'm misunderstanding you? I'm unsure how this would still apply. Also, can I still do this in the field calculator?
Thank you so much for your help!
If there is more than 1 match, you will get an index error. Also a bracket is missing.
[0, 1][sum([True for i in [!a!, !b!, !c!, !d!] if i in [!e!, !f!]])]
But it is a nice way to make multiple comparisons.
a = 'a' b = 'b' c = 'c' d = 'd' e = 'd' f = 'b' print sum([True for i in [a, b, c, d] if i in [e, f]]) print "yes" if sum([True for i in [a, b, c, d] if i in [e, f]]) else "no" # results 2 yes
a, b, c, d = 'abcd' e, f = 'ab' [0, 1][max([True for i in [a, b, c, d] if i in [e, f]])] 1
was using the phone... max is the correct, rather than sum, since it will either be 0 or 1, so even a single 1 will trigger
Again, substitute the letters for your field names
Try this in the code block:
def TextValue(juris, mgmt1, mgmt2, mgmt3, edc_mgmt, edc_juris): s4 = set([juris, mgmt1, mgmt2, mgmt3]) s2 = set([edc_mgmt, edc_juris]) if s2.intersection(s4) return "YES" else: return "NO"
and call it like this:
TextValue(!JURIS!, !MGMT1!, !MGMT2!, !MGMT3!, !EDC_MGMT!, !EDC_JURIS!)