【问题标题】:Converting dictionary values in python from str to int in nested dictionary将python中的字典值从str转换为嵌套字典中的int
【发布时间】:2016-06-05 06:33:08
【问题描述】:

我目前有一个嵌套字典,如下所示:

series = { 

'a': {'foo':'2', 'bar':'3', 'baz':'7', 'qux':'1'},
'b': {'foo':'6', 'bar':'4', 'baz':'3', 'qux':'0'},
'c': {'foo':'4', 'bar':'5', 'baz':'1', 'qux':'6'}
}

我正在尝试将字符串中的值转换为整数。

这个方法我试过了:

newseries = dict((k,int(v)) for k,v in series.items())

但我得到的只是一条错误消息:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'dict'

我做错了什么?

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    在这种情况下你必须更深入:

    In [4]: {k: {kk: int(vv) for kk, vv in v.items()}
             for k, v in series.items()}
    Out[4]: 
    {'a': {'bar': 3, 'baz': 7, 'foo': 2, 'qux': 1},
     'b': {'bar': 4, 'baz': 3, 'foo': 6, 'qux': 0},
     'c': {'bar': 5, 'baz': 1, 'foo': 4, 'qux': 6}}
    

    您自己的示例只是迭代 series 的键、值对,它具有(嵌套)dict 值。

    请注意,这不是通用解决方案。为此,您需要递归或堆栈。

    【讨论】:

      【解决方案2】:

      int(v) -- v 是一个字典!

      这里的这一行,您正在尝试将字典转换为整数。

      你需要在里面嵌套另一个字典理解

      基本上,如果您将 [int(v)] 替换为类似

      [dict((a,int(b) for (a,b) in v.items())]
      

      没有测试出来,但你明白了,嵌套也可能会有点乱

      我建议只编写一个函数,该函数接受字典并将其值从字符串转换为 int,然后您可以将 [int(v)] 替换为类似

       [convertDictValsToInts(v)]
      

      【讨论】:

        【解决方案3】:

        在您的示例中,v 是内部字典,而不是内部值。您要做的就是将内部 dict 中的所有值转换为 int。

        {k1: {k2: int(v2) for k2, v2 in series[k1].items()} for k1 in series}
        

        【讨论】:

          【解决方案4】:

          正如 Ilja Everilä 所说,如果您想要一个适用于各种嵌套 dict 的通用解决方案,您可以使用递归函数。

          我想像下面这样的东西会起作用(当我有更多时间时会测试它)。

          def series_to_int(series):
              for k,v in series.items():
                  if type(v) == dict:
                      series_to_int(v)
                  elif type(v) == str:
                      series[k] = int(v)
          

          请注意,上述例程将就地更改您的series。如果您想要一种更实用的方法(返回值可以像 int_series = series_to_int(series) 一样使用,则必须稍微调整一下。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-12-05
            • 2023-03-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-04
            • 1970-01-01
            • 2017-01-20
            相关资源
            最近更新 更多