Python 字母和数字之间的间距

Python 字母和数字之间的间距,python,json,filter,Python,Json,Filter,所以基本上,我正在尝试编写一个过滤器,在这里我可以从字典中分离数字和字母,并在它们之间留出一个空间。比如12346S12346Q 不需要字典列表,您希望直接填充和转储新的字典 另外,不需要try/except,因为str.isalpha从不抛出异常,所以不需要try/except。您应该结合检查来测试它是否只包含字母或数字isalnum,以及它是否只包含字母isalpha或数字isdigit 然后,您也不会在原始字典上每迭代一步编写一次文件,而是在最后只编写一次以转储整个结果字典 new_dic

所以基本上,我正在尝试编写一个过滤器,在这里我可以从字典中分离数字和字母,并在它们之间留出一个空间。比如12346S12346Q


不需要字典列表,您希望直接填充和转储新的字典

另外,不需要try/except,因为str.isalpha从不抛出异常,所以不需要try/except。您应该结合检查来测试它是否只包含字母或数字isalnum,以及它是否只包含字母isalpha或数字isdigit

然后,您也不会在原始字典上每迭代一步编写一次文件,而是在最后只编写一次以转储整个结果字典

new_dict = {}

for key,value in dict_info.iteritems():
    check = key.isalnum() and not (key.isalpha() or key.isdigit())

    new_dict[insert_spaces(key)] = value
    print (key, ":", value)

with open('output.json', 'wb') as outfile:
    json.dump(new_dict, outfile, indent=4)
需要在数字+字母或字母+数字之间插入空格的函数insert_spaces如下所示:

import re
def insert_spaces(key):
    return re.sub(r'(\D)(\d)', r"\1 \2", re.sub(r'(\d)(\D)', r"\1 \2", key))
或者,您可以用Python 2.7中的字典理解替换整个代码:

with open('output.json', 'wb') as outfile:
    json.dump({ insert_spaces(key): dict_info[key] for key in dict_info if key.isalnum() and not (key.isalpha() or key.isdigit()) }, outfile, indent=4)
或者通过将检查条件提取到lambda函数中来设置更好的格式:

check_key = lambda key: key.isalnum() and not (key.isalpha() or key.isdigit())
with open('output.json', 'wb') as outfile:
    json.dump({ insert_spaces(k): dict_info[k] for k in dict_info if check_key(k) }, 
              outfile, indent=4)

嘿,我该如何分割字母和数字,使两者都有空间。@Benji添加了一个函数,您可以使用它。请注意,它要求您导入re module.Sweet。我还有最后一个问题。所以基本上,假设我有一把钥匙,比如CS10,CS70。所以我想做的是,如果前几个字符相同,则通过。如果它们不相同,则继续将其添加到列表中。所以我喜欢比较两个词。
check_key = lambda key: key.isalnum() and not (key.isalpha() or key.isdigit())
with open('output.json', 'wb') as outfile:
    json.dump({ insert_spaces(k): dict_info[k] for k in dict_info if check_key(k) }, 
              outfile, indent=4)