2014-07-16 42 views
1

我有一個字符串列表,其中前綴字符表示數字的乘法因子。所以,如果我有這樣的數據:將字符串中的字符轉換爲使用Python的多個字符

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'} 

要插入其對應的字符串。當我看到類似於我的其他問題時,有一個角色被翻譯成另一個角色。有沒有辦法使用翻譯功能將一個字符翻譯成多個字符,還是應該以不同的方式處理?

+0

給你希望 –

+0

對不起輸出的例子,我期望的輸出是out = ['101e-9','100e-3','100.100e-15'] – mataleo99

回答

5

您可以使用正則表達式這個,這個工程的'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 

而且使用​​非正則表達式版本:

>>> from itertools import takewhile 
>>> def find_suffix(s): 
    return ''.join(takewhile(str.isalpha, s[::-1]))[::-1] 
... 
>>> for d in data: 
    sfx = find_suffix(d) 
    print (d.replace(sfx, prefix_dict.get(sfx, sfx))) 
...  
101e-9 
100e-3 
100.100e-15 
1e-1 
1e1 
0
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'] 

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

+0

對不僅僅是一個字符的鍵是否有效? – Serbitar

+0

所以你有不止一個字符的鍵? –

+0

看看上面的字典,例如:'da' – Serbitar

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) 

這適用於在字典和數據的任意組合。如果字典鍵總是隻有1個字符串,那麼您在此處發佈了許多其他解決方案。

+0

不會更改列表中的任何值 –

+0

您是對的,已修復 – Serbitar