【问题标题】:How do I delete keys from a dictionary that are shorter than a certain length in python?python - 如何从字典中删除短于python中某个长度的键?
【发布时间】:2017-10-19 18:49:13
【问题描述】:

我有一本包含不同字长键的字典,例如:

d={'longggg':'a', 'short':'b', 'medium':'c', 'shor':'d'}

我想最终得到一个只有大于一定长度的键的字典。例如,我只想保留 6 个字母或更长的条目。所以我想要

new_d={'longggg':'a', 'medium':'c'}.

我试过了

new_d=dict(k,v) for k,v in d.items() if len[k]>=6

和

new_d={}
for k, v in d.items():
    if len[k]>=6:
        new_d.update({k:v})

以及该代码的许多其他变体,但问题最终在于获取密钥的长度。

【问题讨论】:

  • new_d={k:v for k,v in d.items() if len(k)>=6}。您在len[k] 中使用的方括号用于索引,您想调用该函数,因此请使用括号。
  • 哪个版本的 Python? d.items() 仅适用于版本 3+
  • @DanielGale 不正确。我发表的评论在发布之前在 Python 2 中进行了测试。
  • @DanielGale stackoverflow.com/questions/10458437/… iteritems 被添加以创建一个生成器,有点像xrange for range,它成为 Python 3 中的默认 range。
  • @DanielGale 完全正确 :)

标签: python dictionary key string-length


【解决方案1】:

使用Dictionary comprehensions。无需做for k in d.keys()。只需使用for k in d,因为d.keys() 将返回一个根本不需要的列表。 (我从 Stackoverflow 本身学到的一课!!)

正如@roganjosh 指出的那样,使用len() 而不是len[](len() 是一个函数)。方括号用于在列表和字符串中进行索引。

d={'longggg':'a', 'short':'b', 'medium':'c', 'shor':'d'}

a = {k:d[k] for k in d if len(k)>=6}
print a

输出:

{'medium': 'c', 'longggg': 'a'}

【讨论】:

    【解决方案2】:

    你可以试试这个:

    d={'longggg':'a', 'short':'b', 'medium':'c', 'shor':'d'}
    final_d = {a:b for a, b in d.items() if len(a) >= 6}
    

    输出:

    {'medium': 'c', 'longggg': 'a'}
    

    【讨论】:

      【解决方案3】:

      len 是 Python 中的内置函数,因此使用括号(不是方括号运算符)。

      第一个解决方案的最大问题(除其他外)是您为每个 k, v 创建一个单独的字典。

      如果您修复 len 函数调用,您的第二个解决方案应该可以工作,但我会将 new_d.update({k:v}) 重写为 new_d[k] = v,因为这是使用 Python 字典的标准方式。

      我可以告诉您,您是新手,此类初学者问题的最佳资源将是Python documentation,而不是 Stack Overflow。您还应该尝试将错误输出复制并粘贴到 Google。您可能能够更快地解决问题,并获得更有意义的答案。

      【讨论】:

        猜你喜欢
        • 2011-02-17
        • 2012-07-01
        • 2021-02-23
        • 1970-01-01
        • 2019-11-18
        • 2014-09-02
        • 1970-01-01
        相关资源
        最近更新 更多