我有一个大约1亿个键/值对的大字典。
我想转换所有可以轻松转换为int的值。
例如,如果我从:
开始b = {'one': '001', 'two': 2, 'three': 'three'}
我希望结果是
b2 = {'one': 1, 'two': 2, 'three': 'three'}
如果我只是迭代b并将所有值转换为int,那么当它到达三个时会出错。
怎么能这样做?
答案 0 :(得分:3)
传入try/except
时,您可以使用int()
来捕获three
引发的ValueError。示例 -
b2 = {}
for k,v in b.items():
try:
b2[k] = int(v)
except ValueError:
b2[k] = v
你应该注意,这也会将浮点数截断为整数,但我猜这是预期的行为。
演示 -
>>> b = {'one': '001', 'two': 2, 'three': 'three'}
>>> b2 = {}
>>> for k,v in b.items():
... try:
... b2[k] = int(v)
... except ValueError:
... b2[k] = v
...
>>> b2
{'one': 1, 'two': 2, 'three': 'three'}
答案 1 :(得分:1)
虽然也许有点unpythonic你可以在转换前测试是否是数字:
b2 = {k: int(v) if isinstance(v, str) and v.isdigit() else v for k, v in b.items()}