2017-01-25 189 views
4

original字典键都是整数。如何使用更短的方法将所有整数键转换为字符串?如何将嵌套字典键转换为字符串?

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'}} 
+0

多少级你需要递归? –

+0

'''......较短的方法......''' - 执行时间或更少的代码行数? – wwii

回答

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 

,如果你知道所有的值要么字典或简单值,那么你可以删除所有的elifs和convert_list函数

2
def f(d): 
    new = {} 
    for k,v in d.items(): 
     if isinstance(v, dict): 
      v = f(v) 
     new[str(k)] = v 
    return new 
2
import json 
original = {1:{},2:{101:"OneZeroOne",202:"TwoZeroTwo"}} 
text = json.dumps(original) 
json.loads(text) 

出来:

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