簡體   English   中英

在嵌套字典中將python中的字典值從str轉換為int

[英]Converting dictionary values in python from str to int in nested 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'

我究竟做錯了什么?

在這種情況下,您必須更深入:

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值的鍵,值- 系列對

請注意,這不是通用解決方案。 為此,您需要遞歸或堆棧。

int(v) -v是字典!

此行,您正在嘗試將字典轉換為整數。

您需要在其中嵌套另一個字典理解

基本上,如果您將[int(v)]替換為類似

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

沒測試出來,但是你知道了,嵌套也可能有點混亂

我建議只寫一個接受字典並將其值從字符串轉換為int的函數,然后就可以將[int(v)]替換為

 [convertDictValsToInts(v)]

在您的示例中, v是內部字典,而不是內部值。 您要做的是將內部字典中的所有值都轉換為一個int。

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

如IljaEverilä所述,如果您想為所有嵌套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)的返回值int_series = series_to_int(series) ,則必須對其進行一些調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM