如何对以下值使用字典理解literals?list
现在我可以迭代嵌套字典并获得带有嵌套值的结果字典,但我想包含在输出dict、列表和文字(int,str)中
这是我的例子(我知道isinstance这里不需要)
nested_dict = {'first':{'a':1}, 'second':{'b':2}, 'third': 3, 'fourth': [1, 2, 3, 4]}
float_dict = {
outer_k: { float(inner_v)
for (inner_k, inner_v) in outer_v.items()}
for (outer_k, outer_v) in nested_dict.items()
if isinstance(outer_v, dict)
}
print(float_dict)
Run Code Online (Sandbox Code Playgroud)
预期输出:
{'first': {'a': 1.0}, 'second': {'b': 2.0}, 'third': 3.0, 'fourth': [1.0, 2.0, 3.0, 4.0]}
Run Code Online (Sandbox Code Playgroud)
使用单一推导式(合理地)不可能,您需要像这样的递归函数:
def floatify(v):
if isinstance(v, list):
return list(map(floatify, v))
if isinstance(v, dict):
return {k: floatify(_v) for k, _v in v.items()}
return float(v)
Run Code Online (Sandbox Code Playgroud)
>>> floatify(nested_dict)
{'first': {'a': 1.0}, 'second': {'b': 2.0}, 'third': 3.0, 'fourth': [1.0, 2.0, 3.0, 4.0]}
Run Code Online (Sandbox Code Playgroud)
请注意,您可以使该函数更加通用:
def anyify(v, f):
if isinstance(v, list):
return [anyify(_v, f) for _v in v]
if isinstance(v, dict):
return {k: anyify(_v, f) for k, _v in v.items()}
return f(v)
anyify(nested_dict, float)
Run Code Online (Sandbox Code Playgroud)