我正在遍历字符串中的字符,我想确定每个字符的类型。
这可以通过if / else块来完成:
if char.isdigit():
char_type = 'number'
elif char.isalpha():
char_type = 'letter'
elif char in {'*', '/', '+', '-', '='}:
char_type = 'operator'
else:
char_type = 'other'
如果代码是这样的:
if val == 1:
char_type = 'number'
elif val == 2:
char_type = 'letter'
elif val == 3:
char_type = 'operator'
字典可能是:
d = {1: 'number', 2: 'letter', 3: 'operator'}
但在这种情况下,每个陈述都是True
或False
。这可以转换成字典吗?
答案 0 :(得分:1)
是的,您可以使用d[char]
语法,但它几乎不值得花费复杂性和可读性。
您可以将if/else
封装在类的__getitem__
方法中,然后使用[]
语法检索字符类型,如下所示:
class CharType:
def __getitem__(self, char):
if char.isdigit():
char_type = 'number'
elif char.isalpha():
char_type = 'letter'
elif char in {'*', '/', '+', '-', '='}:
char_type = 'operator'
else:
char_type = 'other'
return char_type
d = CharType()
print(d["a"], d["+"])
答案 1 :(得分:0)
是的,您可以设置字典来完成所有工作。设置完成后,您可以非常快速地运行大量文本:
import string
type_dictionary = dict()
type_dictionary.update({c: 'letter' for c in string.ascii_letters})
type_dictionary.update({c: 'number' for c in string.digits})
type_dictionary.update({c: 'operator' for c in {'*', '/', '+', '-', '='}})
string = "elif val == 3:"
for character in string:
print(character, "->", type_dictionary.get(character, 'other'))
输出
e -> letter
l -> letter
i -> letter
f -> letter
-> other
v -> letter
a -> letter
l -> letter
-> other
= -> operator
= -> operator
-> other
3 -> number
: -> other
另一种方法是使用字符转换表:
import string
import itertools
type_dictionary = {'1': 'number', '2': 'letter', '3': 'operator', '4': 'other'}
maketrans_dictionary = dict({c: '4' for c in string.printable})
maketrans_dictionary.update({c: '2' for c in string.ascii_letters})
maketrans_dictionary.update({c: '1' for c in string.digits})
maketrans_dictionary.update({c: '3' for c in {'*', '/', '+', '-', '='}})
table = str.maketrans(maketrans_dictionary)
string = "elif val == 3:"
for character, character_type in zip(string, string.translate(table)):
print(character, "->", type_dictionary[character_type])
以上两者都不是Unicode友好的,没有额外的工作,但我认为这不是问题,因为char in {'*', '/', '+', '-', '='}
都不是。
答案 2 :(得分:-1)
根据我的问题理解。
s="abcd12e+"
dic={}
for i in s:
if i.isdigit():
dic[i]="digit"
elif i.isalpha():
dic[i]="alpha"
elif i in ['*', '/', '+', '-', '=']:
dic[i]="operator"
else:
dic[i]="other"
print dic
示例字符串输出为: {'a':'alpha','c':'alpha','b':'alpha','e':'alpha','d':'alpha','+':'operator',' 1':'数字','2':'数字'}