使用Python将字符串中的字符转换为多个字符

使用Python将字符串中的字符转换为多个字符,python,string,list,dictionary,Python,String,List,Dictionary,我有一个字符串列表,前缀字符表示数字的乘数。因此,如果我有如下数据: data = ['101n', '100m', '100.100f'] 我想用字典 prefix_dict = {'y': 'e-24', 'z': 'e-21', 'a': 'e-18', 'f': 'e-15', 'p': 'e-12', 'n': 'e-9', 'u': 'e-6', 'm': 'e-3', 'c': 'e-2', 'd': 'e-1', 'd

我有一个字符串列表,前缀字符表示数字的乘数。因此,如果我有如下数据:

data = ['101n', '100m', '100.100f']
我想用字典

prefix_dict = {'y': 'e-24', 'z': 'e-21', 'a': 'e-18', 'f': 'e-15', 'p': 'e-12',
               'n': 'e-9', 'u': 'e-6', 'm': 'e-3', 'c': 'e-2', 'd': 'e-1',
               'da': 'e1', 'h': 'e2', 'k': 'e3', 'M': 'e6', 'G': 'e9',
               'T': 'e12', 'P': 'e15', 'E': 'e18', 'Z': 'e21', 'Y': 'e24'}
插入相应的字符串。当我看其他类似于我的问题时,有一个字符被翻译成另一个字符。有没有一种方法可以使用translate函数将一个字符转换为多个字符,或者我应该以不同的方式处理这个问题

 import re

data = ['101da', '100m', '100.100f']

prefix_dict = {'y': 'e-24', 'z': 'e-21', 'a': 'e-18', 'f': 'e-15', 'p': 'e-12',
               'n': 'e-9', 'u': 'e-6', 'm': 'e-3', 'c': 'e-2', 'd': 'e-1',
               'da': 'e1', 'h': 'e2', 'k': 'e3', 'M': 'e6', 'G': 'e9',
               'T': 'e12', 'P': 'e15', 'E': 'e18', 'Z': 'e21', 'Y': 'e24'}
comp = re.compile(r"[^\[A-Za-z]")
for ind,d in enumerate(data):
    pre = re.sub(comp,"",d)
    data[ind] = d.replace(pre,prefix_dict.get(pre))
print data
['101e1', '100e-3', '100.100e-15']
如果x.isalpha()][0],则可以使用
pre=[x代表d中的x]
而不是使用re

您可以使用
pre=[x for x in d if x.isalpha()][0]
而不是使用re

尝试:

for i, entry in enumerate(data):
    for key, value in sorted(prefix_dict.items(), 
                             key = lambda x: len(x[0]), reverse=True):     
# need to sort the dictionary so that 'da' always comes before 'a'
        if key in entry:
            data[i] = entry.replace(key, value)
print(data)
这适用于字典和数据中的任意组合。如果dictionary键的长度始终只有1个字符串,则此处会发布许多其他解决方案。

请尝试:

for i, entry in enumerate(data):
    for key, value in sorted(prefix_dict.items(), 
                             key = lambda x: len(x[0]), reverse=True):     
# need to sort the dictionary so that 'da' always comes before 'a'
        if key in entry:
            data[i] = entry.replace(key, value)
print(data)

这适用于字典和数据中的任意组合。如果字典键总是只有一个字符串长,那么您可以在此处发布许多其他解决方案。

您可以使用正则表达式,这也适用于
'da'

>>> data = ['101n', '100m', '100.100f', '1d', '1da']
>>> import re
>>> r = re.compile(r'([a-zA-Z]+)$')
>>> for d in data:
    print r.sub(lambda m: prefix_dict.get(m.group(1), m.group(1)), d)
...     
101e-9
100e-3
100.100e-15
1e-1
1e1
和非正则表达式版本,使用:


您可以使用regex进行此操作,这也适用于
'da'

>>> data = ['101n', '100m', '100.100f', '1d', '1da']
>>> import re
>>> r = re.compile(r'([a-zA-Z]+)$')
>>> for d in data:
    print r.sub(lambda m: prefix_dict.get(m.group(1), m.group(1)), d)
...     
101e-9
100e-3
100.100e-15
1e-1
1e1
和非正则表达式版本,使用:


举一个你期望的输出的例子对不起,我期望的输出是out=['101e-9','100e-3','100.100e-15']举一个你期望的输出的例子对不起,我期望的输出是out=['101e-9','100e-3','100.100e-15']这适用于不只是一个字符的键吗?所以你有不止一个字符的键吗?看看上面的字典,例如:“da”为了完整性,我包括了一个两个字符的键,但是对于我正在查看的数据,我可以将其从字典中删除。这是否适用于不只是一个字符的键?因此您有多个字符的键?请查看上面的字典,例如:“da”为了完整性,我包含了一个两个字符的键,但是对于我正在查看的数据,我可以从字典中删除它。不更改列表中的任何值不更改列表中的任何值