I am using ArcMap Desktop 10.5. Im trying to use field calculator to return a max value between other fields in the feature based upon a condition. I am not new to python, but I am new to implementing it in Arc. Using field calculator, it seems as though you can reference that row's value for a particular field by delimiting the field names with '!'. What I would like to do is take the numeric amounts for how many people speak a given language per tract feature and then return a string of the most common language name as long as the language is spoken by at least 5% of the population. An example of a python code that I assumed would work is first having a dictionary with keys as the text string for the language name and dictionary values by referring to that field name with '!'. Then putting this dictionary and a function in the 'Pre-logic Script Code' and then in the field calculator passing in this dictionary into the function to return a string.
Pre-logic Script Code:
Totals = {'Total':!Estimate__Total_!, 'Total only English':!Estimate__Total____Speak_only_English!, 'Spanish' : !Estimate__Total____Spanish____Speak_English_less_than_!, 'French': !Estimate__Total____French__Haitian__or_Cajun____Speak_English_le!, 'German' : !Estimate__Total____German_or_other_West_Germanic_languages____S1!, 'Russian': !Estimate__Total____Russian__Polish__or_other_Slavic_languages__1!, 'Indo European': !Estimate__Total____Other_Indo_European_languages____Speak_Engli1!, 'Korean': !Estimate__Total____Korean____Speak_English_less_than_!, 'Chinese': !Estimate__Total____Chinese__incl__Mandarin__Cantonese_____Speak1!, 'Vietnamese': !Estimate__Total____Vietnamese____Speak_English_less_than_!, 'Tagalog': !Estimate__Total____Tagalog__incl__Filipino_____Speak_English_les!, 'Asian': !Estimate__Total____Other_Asian_and_Pacific_Island_languages____1!, 'Arabic': !Estimate__Total____Arabic____Speak_English_less_than_!, 'Other': !Estimate__Total____Other_and_unspecified_languages____Speak_Eng1!}
def mostCommon (dic)
most = 0
lang = ''
tot = dic['Total']
for k,v in dic.items():
if (v > most) and (v >= (tot *.05)):
most = v
lang = k
if lang == '':
return 'None'
else:
return lang
and then in my field calculator box below I simply pass the dictionary into the function
mostCommon(Totals)
However, this gives me a parameter error. Is there any other way for this to be done in field calculator? I have also researched using UpdateCursor, but im not quite sure how I can reference a value in a particular field for the row and add it to a dictionary as I have above.
thank you for your help