在嵌套字典中将python中的字典值从str转换为int

时间:2016-06-04 22:16:32

标签: python dictionary

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

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'

我做错了什么?

4 个答案:

答案 0 :(得分:3)

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

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}}

您自己的示例只是迭代系列的键值,它们具有(嵌套)dict值。

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

答案 1 :(得分:0)

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

此行,您正在尝试将字典转换为整数。

你需要在

中嵌套另一个词典理解

基本上如果用

之类的东西替换[int(v)]
##

没有测试出来,但是你得到了这个想法,还有一些可能会有点混乱的嵌套

我建议只编写一个函数,它接受一个字典并将它的值从字符串转换为int,然后你可以用[/(b)之类的东西替换[int(v)]

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

如IljaEveilä所述,如果您想要各种嵌套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)这样的返回值,你将不得不稍微调整一下。