我正在尝试将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
为什么会这样?
答案 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()}
答案 3 :(得分:3)
由于某种原因,您的k
变量包含'b'
。因此你的表达
{k:float(v) for v in d.values()}
实际上是
{'b': float(v) for v in d.values()}
所以结果是:
{'b': 4.0}