2016-05-05 10 views
0

私はそれぞれ8桁の識別子のリストを持っています。これらのIDのスライスを異なる文字と数字。IDのリストがあります。実行して特定の文字を置き換えるためにスライスする必要があります

私は最初のものを正しく得ることができましたが、ループの次のステップで問題が生じています。

for I in ID: 

    if I[:3] in mapA_dict: 
     for inp in mapA_dict: 
      I = I.replace(inp, mapA_dict[inp]) 
    print I 
    if len(I) <= 8: 
      for I[0] in mapA2_dict: 
       for inp in mapA2_dict: 
        I = I.replace(inp, mapA2_dict[inp]) 
       print I 

が、私はエラーを取得しています:ここに私のコードです

TypeError         Traceback (most recent call last) 
<ipython-input-22-49924532d1ff> in <module>() 
    11 #   print I 
    12  if len(I) <= 8: 
---> 13    for I[0] in mapA2_dict: 
    14     for inp in mapA2_dict: 
    15      I = I.replace(inp, mapA2_dict[inp]) 

TypeError: 'str' object does not support item assignment 
+0

の線に沿って何かにそのコードを向けるだろう

あなたは 'エラーのある行にfor'、または' if'を意味していますか? – RoadieRich

+0

ようこそスタックオーバーフロー! Stack OverflowはQ&Aサイトです。自分のようなメンバーは、他のメンバーが自分の質問に答えようとしている間に質問します。質問をしたり、素晴らしい回答を得ることについての詳細は、[ask](さらに具体的には[mcve])を参照してください。あなたの投稿には良い質問の必須要素が欠落していることに気づきます。*質問自体!*。特定の質問がありますか? –

+0

はい、申し訳ありません。そのセミワークは、変更前と変更後のIDが重複している点を除いて – staten12

答えて

0

文字列が項目の割り当てをサポートしていないので、あなたが取得しているエラーがあります。

あなたは文字ずつIを反復処理し、それを変更したい場合は、その上を通過するよう、あなたは何に基づいて、しかし、ソートの

if len(I) <= 8: 
    new_I = '' 
    for i in I: 
     if i in mapA2_dict: 
      new_I.append(mapA2_dict[i]) 
     else: 
      new_I.append(i) 

クリーナーアプローチのように、新しい文字列を作成する必要がありますあなたがやっているように見える、translation tableを使用することです。

import string 
mapA2 = string.maketrans(from="abc", to="def") 
# This equates to translating `a` to `d`, `b` to `e`, `c` to `f` 
if len(I) <= 8: 
    I = I.translate(mapA2) 
関連する問題