如何在Python中删除字典中长度小于某个特定长度的键?

3

我有一个字典,其中包含不同长度的键,例如:

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})

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


2
new_d={k:v for k,v in d.items() if len(k)>=6}。你在 len[k] 中使用的方括号是用于索引的,而你实际上想要调用函数,所以应该使用圆括号。 - roganjosh
1
哪个版本的Python?d.items()仅适用于3+版本。 - Daniel Gale
1
@DanielGale 不是真的。在我发布评论之前,我已经在Python 2中进行了测试。 - roganjosh
1
iteritems 是为了创建一个生成器而添加的,有点像 rangexrange,在 Python 3 中成为默认的 range - roganjosh
1
@DanielGale 没错 :) - roganjosh
显示剩余2条评论
3个回答

2
使用字典推导式。无需使用“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'}

1
你可以尝试这个:

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'}

0

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

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

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

我可以明显地看出你是新手,像这样的初学者问题的最佳资源将是 Python 文档 而不是 Stack Overflow。你还应该尝试将错误输出复制并粘贴到 Google 中。你可能会更快地解决问题,并获得更有意义的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接