首页 > 解决方案 > 跳过字典中的短字母/单词组合

问题描述

d = {'E1': ['Fish','1B', '12C35','53901','AB3', '11Rs', 'C140','funny', '2ml', '5mm', '1a'],
       'E2': ['Jon','521','ag14', 'O2', 'Sp02', 'fun', '1245A444', 'BAK1', 'TA42']}

我有以下字典d。我不想让字母/数字混合4 个字符或更短,例如'1B'AB3''C140'等都将被跳过。我想要以下输出:

d = {'E1': ['Fish','12C35','53901', 'funny'],
       'E2': ['Jon','521', 'fun', '1245A444']}

为了得到我想要的上面的输出,我不确定正则表达式是否会是答案或类似的东西,保持字典值大于五的长度(但这并没有给我想要的输出)。任何人都可以帮忙吗?

标签: regexpython-3.xstringlistdictionary

解决方案


您可以使用以下代码:

>>> dd={}
>>> for k, v in d.items():
...     dd[k] = [x for x in v if re.search(r'^(?:\d+|[a-zA-Z]+)$', x) or len(x) > 4]
...
>>> print (dd)
{'E1': ['Fish', '12C35', '53901', 'funny'], 'E2': ['Jon', '521', 'fun', '1245A444BAK1']}

如果每个值满足以下两个条件中的任何一个,则此代码迭代原始字典并将值存储在新字典中:

  1. 仅由数字或字母组成。
  2. 长度大于 4。

代码演示


推荐阅读