Optimise many namedtuple assignment statements
What if, instead of multiple variables, you would define a list of names, which you then use to create a dictionary of names to Unit instances which are initialized using dictionary unpacking:

names = [
    'trooper',
    'robot',
    'commando',
    'flame_trooper'
]
items = {
    name: Unit(**units[index])
    for index, name in enumerate(names)
}


Please think of better variable names for names and items.