2017-03-17 76 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