我正在寻找使用字典来将所有100个python字符引用为整数。然后将字典应用于字符串。我已经在一个小示例上对此进行了测试,但似乎无法正确完成。
#Dict
printable = {'a':1,'b':2,'c':3,'d':4}
#Sample string
test_string = 'abbcd'
#Apply the dict on the string
print([printable.index(x)+1 for x in test_string if x in printable])
打印语句失败,并显示:
AttributeError: 'dict' object has no attribute 'index'
我想要的输出是:
[1,2,2,3,4]
答案 0 :(得分:2)
printable
是一个字典,您可以使用Python索引运算符[]
直接对其进行索引:
print([printable[x] for x in test_string if x in printable])
答案 1 :(得分:1)
在string
模块中,所有可打印(ASCII)字符都可以作为字符串在Python中使用:string.printable
。在Python字符串中,支持.index()
方法。
这意味着您可以避免使用字典,而直接使用字符串:
[string.printable.index(x) for x in test_string if x in string.printable]
尽管您的字符串很长,但首先构建字典可能会更快:
printable = dict((char, i+1) for i, char in enumerate(string.printable))
答案 2 :(得分:1)
您可以映射字典方法以在测试字符串上获取一项(dict.get
):
# just fetch the dictionary value for every character in the input
replacements = map(printable.get, test_string)
# make them strings since they're integers and you want to join them
string_replacements = map(str, replacements)
# join the resulting map operation to one string
''.join(string_replacements)
# should result in '12234'
只需要确保值是字符串即可。在这种情况下,我也将str
映射到它们上以确保这一点。
最终将地图结果与''.join
结合起来以获取所需的字符串。
答案 3 :(得分:1)
您可以遍历test_string
并按照字典对每个字符进行测试,如下所示:
printable = {'a':1,'b':2,'c':3,'d':4}
#Sample string
test_string = 'abbcd'
finalList = [] #Create List
for char in test_string: #For each character in the test string
if char in printable: #Test to see if the key exists
finalList.append(printable[char]) #Append the value to list
print(finalList) #Print the List