def removeSpecialChars(oneKey):

    okExceptions = ['4+']

    # ran into a strange case here where most of the elements were strings
    # like 'grade_1' but some were just integers like 3 :(
    # so ... these next few blocks of code are TOTAL HACKS ...
    numInt = 0
    numNot = 0
    aString = ''
    aInt = 9999
    for ii in range(len(oneKey)):
        aLabel = str(oneKey[ii])
        if (aLabel.upper() == "NA"):
            continue
        if (aLabel.upper() == "UNKNOWN"):
            oneKey[ii] = "NA"
            continue
        try:
            iVal = int(aLabel)
            numInt += 1
            aInt = iVal
        except:
            numNot += 1
            aString = aLabel

    print "         number of integers = %d    number NOT = %d " % (numInt, numNot)

    if (numInt > 0 and numNot > 0):

        # for now, we are just checking for 'grade' strings that are sometimes
        # 'grade_3' and sometimes just '3'
        if (aString.lower().startswith("grade_")):
            for ii in range(len(oneKey)):
                aLabel = str(oneKey[ii])
                if (aLabel.upper() == "NA"):
                    continue
                if (not aLabel.lower().startswith("grade_")):
                    try:
                        iVal = int(aLabel)
                        aString = "Grade_%d" % iVal
                        oneKey[ii] = aString
                    except:
                        print "     FAILED to prepend grade ??? ", aLabel
                        sys.exit(-1)

        # or if there are at least twice as many strings as integers, then we
        # will cast the integers to strings ...
        elif (numInt < (numNot / 2)):
            for ii in range(len(oneKey)):
                aLabel = str(oneKey[ii])
                if (aLabel.upper() == "NA"):
                    continue
                try:
                    iVal = int(aLabel)
                    oneKey[ii] = str(iVal)
                except:
                    doNothing = 1

        elif (aString not in okExceptions):
            if ( 1 ):
                print " WARNING ... something odd about this feature ... ", aInt, aString
                print oneKey
                ## return ([])
                ## sys.exit(-1)

    origUniqList = []
    newUniqList = []

    newKey = []
    for aLabel in oneKey:

        if (aLabel not in origUniqList):
            origUniqList += [aLabel]

        bLabel = ""
        try:
            for ii in range(len(aLabel)):
                if (aLabel[ii] == ' '):
                    bLabel += "_"
                elif (aLabel[ii] == "'"):
                    bLabel += "_"
                elif (aLabel[ii] == '"'):
                    bLabel += "_"
                elif (aLabel[ii] == ':'):
                    bLabel += "_"
                elif (aLabel[ii] == '/'):
                    bLabel += "_"
                # elif ( aLabel[ii] == '-' ):
                ##     bLabel += "_"
                elif (aLabel[ii] == '.'):
                    bLabel += "_"
                elif (aLabel[ii] == ','):
                    bLabel += "_"
                else:
                    bLabel += aLabel[ii]
        except:
            print " ERROR in removeSpecialChars ??? "
            print " oneKey = <%s> " % (oneKey)
            print " aLabel = <%s> " % (aLabel)
            sys.exit(-1)

        ii = bLabel.find("__")
        while (ii >= 0):
            bLabel = bLabel[:ii] + bLabel[ii + 1:]
            ii = bLabel.find("__")

        newKey += [bLabel]
        if (bLabel not in newUniqList):
            newUniqList += [bLabel]

    print origUniqList
    print newUniqList

    if (len(newUniqList) == len(origUniqList)):
        return (newKey)
    else:
        print " NOT removing parenthetical strings "
        return (oneKey)