2017-03-17 101 views
0

考慮下面的字典擺脫L個符號(long類型)的:在字典理解

d={98558: [283L, 211L, 44L, 0L], 
    98559: [283L, 212L, 44L, 1L], 
    98560: [283L, 213L, 44L, 2L]} 

我想擺脫使用字典理解的L象徵。我的兩個解決方案不起作用:

  1. dmap={k: map(int, v[i]) for v in d.values() for i in v}
  2. dmap={k: int(v[i]) for v in d.values() for i in v}

他們都返回:IndexError: list index out of range,說i=7L。我究竟做錯了什麼?

+2

的 「L」 實際上不是數據的一部分。 Python只是在顯示一個長整型值時纔打印出來,這樣你就可以看到它是一個長整型值。在內部,該值僅爲'7'。當你說「擺脫L」時,你真的在​​問如何將每個long轉換爲int嗎?是否有理由不能使用長整型值? –

回答

1

的問題是,在你的理解iv的元素,即使v[i]成功,v[i]是一個數字,而不是一個列表,所以你的第一個查詢無法執行map。此外k沒有定義(它起源於哪裏?)。

在第二個查詢中,您將int與某個鍵關聯,但k仍未定義。

您可以輕鬆地解決這個問題,如:

dmap = { k: map(int,v) for k,v in d.iteritems() }

或者你可以寫列表理解自己,如:

dmap = { k: [int(vi) for vi in v] for k,v in d.iteritems() }
+0

那麼這種方式實質上是將每個列表作爲自己的一個元素,並將int映射整體應用?我認爲必須單獨應用「int」運算符到所有元素,而元素我指的是數字。 – FaCoffee

+0

@FaCoffee:這就是'map'基本上做的事情:它**將'x'列表映射到'f(x)'。 –

+0

'k'是我扭曲的心靈中的字典密鑰。 – FaCoffee