【问题标题】:How to skip key without value in one line for loop如何在一行for循环中跳过没有值的键
【发布时间】:2019-08-20 03:50:18
【问题描述】:

我想在我的代码中节省一些空间,所以我写了这个简单的 oneline for 循环。从字典 k:[v,v] 我正在创建字典,其中第一个值是键,第二个值保持值。现在我的字典中有一个异常,原来的字典只有一个值,第一个。

glyphs_dict = {'dotaccent': [103, 86], 'ring': [104], 'caron': [105, 85]}
id_dict = {k:v for k,v in list(glyphs_dict.values())}

我尝试过做类似的事情

id_dict = {k:v for k,v in list(glyphs_dict.values()) if k and v}

但不起作用。如何跳过列表中只有一个值的键?

【问题讨论】:

  • 方法错误。使用.items()。也不需要list(...)
  • 不确定你真正的问题是什么,但应该是{k:v for k,v in glyphs_dict.items()}...
  • 好吧,我的问题是我有一个我想跳过的例外情况,即字典中出现一个值时。我认为这些建议都不能解决问题

标签: python python-3.x


【解决方案1】:

这不会返回任何错误

id_dict = {k:v for k,v in list(glyphs_dict.values())}

输出:

{'dotaccent': [103, 86], 'ring': [104], 'caron': [105, 85]}

这将跳过具有一个值的列表的值,只接受具有 2 个值的列表

gid_dict = {k:v for k,v in list(glyphs_dict.items()) if len(v)==2}

输出:

{'dotaccent': [103, 86], 'caron': [105, 85]}

【讨论】:

    【解决方案2】:

    这也有效:

    glyphs_dict = {'dotaccent': [103, 86], 'ring': [104], 'caron': [105, 85]}
    id_dict = {k: v[0] for k, *v in glyphs_dict.values() if v}
    

    【讨论】:

      【解决方案3】:

      如果值大于 1,这将确保添加 dict

      id_dict = {key:value for key,value in glyphs_dict.items() if len(value)>1}
      
      

      【讨论】:

        【解决方案4】:

        你可以试试这个:

        id_dict = {v[0]:v[1] for v in glyphs_dict.values() if len(v) == 2}
        

        如果长度为 2,这将获取字典的所有值作为新键和值(对于 keyvalue

        【讨论】:

        • 不要使用is比较数值,使用==
        • 如果你真的想“在我的代码中节省一些空间”,这看起来是一个正确的答案。但与其创建像这样难以理解的单行代码,我会追求代码的可读性和简洁性。
        • 谢谢!!这很好用,我需要指出 cmets 中的其他人提到不需要将 glyphs_dict.values() 转换为列表
        猜你喜欢
        • 2017-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多