如何在字典中将数字字符串转换为整型?



如果我有一个这样的字典:

d = {'word': {'word1': '1', 'word2': '-1', 'word3': '2'}}

是否有任何方法可以检测到哪个字符串包含一个数字,并将该字符串转换为该数字的相应int表示?

天哪,我终于解决了,太感谢你了!(遗憾的是我不能投票)

一种方法:

d = {'word': {'word1': '1', 'word2': '-1', 'word3': '2'}}

def nested_set(data):
for key, value in data.items():
if isinstance(value, dict):
nested_set(value)
elif isinstance(value, str):
try:
data[key] = int(value)
except ValueError:
pass

nested_set(d)
print(d)

{'word': {'word1': 1, 'word2': -1, 'word3': 2}}

map的递归版本,用于任意嵌套字典(以及列表/元组/集合/序列):

def map_nested(fnc, obj):
if isinstance(obj, dict):
return {k: map_nested(fnc, v) for k, v in obj.items()}
if not isinstance(obj, str):
try:
return type(obj)(map_nested(fnc, x) for x in obj)
except TypeError:
pass
try: 
return fnc(obj)
except:
return obj
map_nested(int, {'word': {'word1': '1', 'word2': '-1', 'word3': '2'}})
# {'word': {'word1': 1, 'word2': -1, 'word3': 2}}
map_nested(int, {'word': {'word1': '1', 'word2': '-1', 'word3': ['2', "5"]}})
# {'word': {'word1': 1, 'word2': -1, 'word3': [2, 5]}}

如果假设您的字典是{'key': {'key': 'integer'}, 'key': {'key': 'integer'}}的形式,您可以使用以下命令:

dct = {...}
result = {key: dict(zip(d, map(int, d.values))) for key, d in dct.items()}

或者如果你的字典和你的例子一样简单,那么下面的代码就足够了:

result = {'word': dict(zip(d, map(int, d.values)))}

最新更新