python中的动态类型转换
我有两条格言:python中的动态类型转换,python,Python,我有两条格言: dicts1 = {'field1':'', 'field2':1, 'field3':1.2} dicts2 = {'field1':123, 'field2':123, 'field3':'123'} 我想将dict2中的每个值转换为与dict1中相应值相同的类型,最快的Python方法是什么?假设它们是兼容类型: for k, v in dicts1.iteritems(): try: dicts2[k] = type(v)(dicts2[k])
dicts1 = {'field1':'', 'field2':1, 'field3':1.2}
dicts2 = {'field1':123, 'field2':123, 'field3':'123'}
我想将
dict2
中的每个值转换为与dict1
中相应值相同的类型,最快的Python方法是什么?假设它们是兼容类型:
for k, v in dicts1.iteritems():
try:
dicts2[k] = type(v)(dicts2[k])
except (TypeError, ValueError) as e:
pass # types not compatible
except KeyError as e:
pass # No matching key in dict
这一行程序可以做到这一点,但它不会检查类型错误:
dicts1 = {'field1':'', 'field2':1, 'field3':1.2}
dicts2 = {'field1':123, 'field2':123, 'field3':'123'}
print {k : type(dicts1[k])(dicts2[k]) for k in dicts2}
这也可以做到这一点,并且对于某些人来说可能更具可读性:
print {k : type(dicts1[k])(v) for (k,v) in dicts2.iteritems()}
有趣的问题。我们能假设这样的转换总是可能的吗?例如,
dict2[“field3”]=“foo”
会引起问题。很好,type(v)(dicts2[k])
正是我们期望它做的。在这种情况下,TypeError
和ValueError
分别被引发?int('bob')引发ValueError-我记不起为什么我现在把TypeError放在下面的位置:(@JonClements:类似于list(3)
的东西会引发TypeError;int(3j)也会引发TypeError)
,等等@DSM宾果游戏-我知道这是有原因的,我只是想知道为什么…谢谢:)