如果我有一个这样的字典:
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)))}