为什么Python dict理解忽略了dict中的第一个元素?

时间:2015-07-05 06:25:58

标签: python python-2.7 dictionary key-value dictionary-comprehension

我正在尝试将floats string值转换为{'a': '1.3', 'b': '4'} 值(最初应该表示为float):

{k:float(v) for v in d.values()}

如果我尝试理解dict:

In [191]: {k:float(v) for v in d.values()}
Out[191]: {'b': 4.0}

我最终只得到了dict中的第二项:

Sub textmove()

    Sheets("Sheet1").Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, _
    1530.25, 520#).Name = "TextBox2"




    Sheets("Sheet1").Shapes("Textbox2").TextFrame.Characters.Text = "This is my textbox"

    Sheets("Sheet1").Shapes("Textbox2").Select
    With Selection.Font
        .Name = "Arial"
        .FontStyle = "Bold"
        .Size = 45
        .StrikeThrough = False
        .Superscript = False
        .Subscript = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
  End Sub

为什么会这样?

4 个答案:

答案 0 :(得分:6)

使用d.items(),您还需要通过变量分别引用键值。此处k表示密钥,v表示值。

{k:float(v) for k,v in d.items()}

示例:

>>> d = {'a': '1.3', 'b': '4'}
>>> {k:float(v) for k,v in d.items()}
{'a': 1.3, 'b': 4.0}

答案 1 :(得分:6)

每个k值都不会更改v值,请将代码更改为:

{k:float(v) for k, v in d.items()}

答案 2 :(得分:3)

Python词典iteritems将是更合适的解决方案。

{k:float(v) for k, v in d.iteritems()}

另请阅读dict.items() vs dict.iteritems()

答案 3 :(得分:3)

由于某种原因,您的k变量包含'b'。因此你的表达

{k:float(v) for v in d.values()}

实际上是

{'b': float(v) for v in d.values()}

所以结果是:

{'b': 4.0}