【问题标题】:How to convert all values of a nested dictionary into strings?如何将嵌套字典的所有值转换为字符串?
【发布时间】:2019-07-01 02:05:24
【问题描述】:

我正在编写一个 python 应用程序,其中我有一个可以嵌套到任何级别的变量字典。

任何级别的键都可以是 int 或 string。但我想将所有级别的所有键和值转换为字符串。字典的嵌套程度是可变的,这使得它有点复杂。

{
    "col1": {
        "0": 0,
        "1": 8,
        "2": {
            0: 2,
        }
        "3": 4,
        "4": 5
    },
    "col2": {
        "0": "na",
        "1": 1,
        "2": "na",
        "3": "na",
        "4": "na"
    },
    "col3": {
        "0": 1,
        "1": 3,
        "2": 3,
        "3": 6,
        "4": 3
    },
    "col4": {
        "0": 5,
        "1": "na",
        "2": "9",
        "3": 9,
        "4": "na"
    }
}

我正在寻找最短和最快的功能来实现这一点。还有像Converting dictionary values in python from str to int in nested dictionary 这样的其他问题提出了一些建议,但没有一个涉及字典的“变量嵌套”性质。

任何想法都会受到赞赏。

【问题讨论】:

标签: python dictionary


【解决方案1】:

这是我能想到的最直接的方法:

import json

data = {'col4': {'1': 'na', '0': 5, '3': 9, '2': '9', '4': 'na'}, 'col2': {'1': 1, '0': 'na', '3': 'na', '2': 'na', '4': 'na'}, 'col3': {'1': 3, '0': 1, '3': 6, '2': 3, '4': 3}, 'col1': {'1': 8, '0': 0, '3': 4, '2': {0: 2}, '4': 5}}
stringified_dict = json.loads(json.dumps(data), parse_int=str, parse_float=str)

这里有一些指向 json 加载和 parse_int 文档的链接:Python3Python2

【讨论】:

  • 嘿,与 int、float、"constant" 配合使用效果很好——不确定那是什么,但它不能转换 bool 或数组。有什么好的选择吗?应该涵盖除布尔之外的所有内容..
  • parse_path 是否有参数用于处理 pathlib.Path 对象?
【解决方案2】:

你可以递归地查字典:

def iterdict(d):
    for k, v in d.items():
        if isinstance(v, dict):
            iterdict(v)
        else:
            if type(v) == int:
                v = str(v)
            d.update({k: v})
    return d

【讨论】:

    猜你喜欢
    • 2023-01-07
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多