【问题标题】:Why is a Python dict comprehension ignoring the first element in the dict?为什么 Python dict 理解会忽略 dict 中的第一个元素?
【发布时间】:2015-09-22 12:41:59
【问题描述】:

我正在尝试将以下字典中的string 值(最初应该表示为浮点数)转换为floats

{'a': '1.3', 'b': '4'}

如果我尝试听写理解:

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

我只得到了字典中的第二个项目:

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

这是为什么?

【问题讨论】:

  • {k:float(v) for v in d.values()} 在这个表达式中是你的k 来自?

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


【解决方案1】:

使用d.items(),还需要通过变量分别引用key、value。这里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}

【讨论】:

    【解决方案2】:

    k 值不会因每个 v 值而更改,请将您的代码更改为以下:

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

    【讨论】:

      【解决方案3】:

      由于某种原因,您的 k 变量包含 'b'。所以你的表情

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

      其实是

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

      所以结果是:

      {'b': 4.0}
      

      【讨论】:

        【解决方案4】:

        Python 字典 iteritems 会是更合适的解决方案。

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

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

        【讨论】:

          猜你喜欢
          • 2020-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-08
          • 1970-01-01
          • 2021-03-10
          • 1970-01-01
          • 2022-12-06
          相关资源
          最近更新 更多