如何将嵌套字典的键转换为字符串?

5

原始的字典键都是整数。有什么更简短的方法可以将所有整数键转换为字符串?


original = {1:{},2:{101:"OneZeroOne",202:"TwoZeroTwo"}}

result = {}
for key in original:
    if not key in result:
        result[str(key)]={}
    for i, value in original[key].items():
        result[str(key)][str(i)] = value
print result 

打印:

{'1': {}, '2': {'202': 'TwoZeroTwo', '101': 'OneZeroOne'}}

你需要递归多少层? - Stephen Rauch
...更短的方法... - 执行时间还是代码行数更少? - wwii
4个回答

3
def f(d):
    new = {}
    for k,v in d.items():
        if isinstance(v, dict):
            v = f(v)
        new[str(k)] = v
    return new

3
import json
original = {1:{},2:{101:"OneZeroOne",202:"TwoZeroTwo"}}
text = json.dumps(original)
json.loads(text)

输出:

{'1': {}, '2': {'101': 'OneZeroOne', '202': 'TwoZeroTwo'}}

3

根据您拥有的数据类型:

original = {1:{},2:{101:"OneZeroOne",202:"TwoZeroTwo"}}
result= json.loads(json.dumps(original))
print(result)

打印:

{'2': {'101': 'OneZeroOne', '202': 'TwoZeroTwo'}, '1': {}}

2
如果您不知道层数,那么递归解决方案可能是最好的选择:
def convert_dict(d):
    return {str(k): convert_value(v) for k,v in d.items()}

def convert_list(lst):
    return [convert_value(item) for item in lst]

def convert_value(v):
    if isinstance(v, dict):
        return convert_dict(v)
    elif isinstance(v, list):
        return convert_list(v)
    # more elifs..
    else:
        return v

如果您知道所有的值都是字典或简单值,那么您可以删除所有的elif语句和convert_list函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接