Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的动态类型转换_Python - Fatal编程技术网

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宾果游戏-我知道这是有原因的,我只是想知道为什么…谢谢:)