我有字典
a = {'age': '12\xa0', 'name': 'pks\xa0\xa0'}
我想删除所有非ASCII字符并替换为空格。
为了删除非字典中的非ASCII字符,我们正在使用
''.join([i if 32 < ord(i) < 126 else " " for i in a])
但如何使用字典。 任何帮助将不胜感激。
答案 0 :(得分:4)
您不需要列表理解,ord
只需编码为ascii并忽略错误:
In [106]: {key:value.encode('ascii',errors='ignore') for key, value in a.items()}
Out[106]: {'age': b'12', 'name': b'pks'}
如果你想用空格替换这是一种有效的方法:
In [117]: def replace_nonascii(mydict):
for key, value in a.items():
new = value.encode('ascii',errors='ignore')
yield key, new + b' ' * (len(value) - len(new))
.....:
In [118]: dict(replace_nonascii(a))
Out[118]: {'age': b'12 ', 'name': b'pks '}
答案 1 :(得分:2)
根据this question的答案,您可以使用re.sub
,删除非ASCII字符并用空格替换它们。
>>> import re
>>> {k : re.sub(r'[^\x00-\x7F]',' ', v) for k, v in a.items()}
{'age': '12 ', 'name': 'pks '}
这应该适用于python-3.x(python)以及python-2.x(pyth off )。
答案 2 :(得分:2)
您可以删除不可打印的ascii字符;它将您提供的代码行应用于将不可打印的ascii替换为空格,并应用于字典中的每个值:
def remove_non_printable_ascii(s):
return ''.join([c if 32 < ord(c) < 127 else " " for c in s])
a = {'age': '12\xa0', 'name': 'pks\xa0\xa0'}
for k in a:
a[k] = remove_non_printable_ascii(a[k])
a
输出:
{'age': '12 ', 'name': 'pks '}
答案 3 :(得分:0)
可以使用map
对字典的迭代:
for k,v in a.items():
a[k] = "".join(map(lambda c: c if 32<ord(c)<127 else " " , v))
print(a)
给出以下输出:
{'name': 'pks ', 'age': '12 '}