Thanks for all the help! Here's what I came up with.
myvlans = meraki.getvlans(apikey, networkid, suppressprint=False)
vlanid = 100
myipassignments = {newmac: {'ip': myip, 'name': name}}
for vlan in myvlans:
if vlan['id'] == vlanid:
vlan['fixedIpAssignments'].pop(oldmac)
vlan['fixedIpAssignments'][newmac] ={'name': name, 'ip': myip}
meraki.updatevlan(apikey, networkid, vlanid, name=None, subnet=None, mxip=None, fixedipassignments=vlan['fixedIpAssignments'], reservedipranges=None, vpnnatsubnet=None, dnsnameservers=None, suppressprint=False)
It works great, but while I was testing I noticed a slight quirk. I was swapping old mac and new mac back and forth, but changing the name so I could be sure things were changing, but the UpdateVLAN function doesn't change the name. It will set the name if it's a new MAC, but if you are recycling a MAC it will retain the name it had originally. You have to use the dashboard to actually change the name. Shouldn't *really* be an issue, but it could be a quirk if you are trying to write a script that adds more description to reservation names. (I like to use CompName-Username, but previous admins didn't follow this method, so I wouldn't be able to write a script to normalize this naming scheme.) Also, it seems like sometimes it will change the name and other times it won't...can't really figure out what the reason is behind it.