Python-如何使用字典来映射字符串的各个字符

时间:2019-03-22 16:50:04

标签: python

我正在寻找使用字典来将所有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]

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