0

関数で辞書を生成してから、この辞書を返します。正しい形式であるにもかかわらず、返された dict に辞書としてアクセスできないようです。データを文字列としてのみ扱っています。つまり、印刷できますが、d.keys() または d を印刷できません。私は一体何を間違っているのですか?????

str() として出力されたときのデータ

{1: '214902885,214902909'、2: '214902910,214902934'、3: '214902935,214902959'、4: '214902960,214902984 : '214903035,214903059', 8: '214903060,214903084', 9: '214903085,214903109', 10: '214903110,214903139'}

d.items() または d.keys() を出力しようとするとエラーが発生する

print bin_mapping.keys()

AttributeError: 'str' オブジェクトに属性 'keys' がありません

関数から dict を返したら、それを辞書として再定義する必要がありますか? 私は非常にイライラしているので、本当に助けていただければ幸いです:/

ありがとう、

ここに示唆されているように、コードは次のとおりです.最初に辞書を返すために呼び出している関数..

def models2bins_utr(id,type,start,end,strand):
  ''' chops up utr's into bins for mC analysis'''
  # first deal with 5' UTR
  feature_len = (int(end) - int(start))+1
  bin_len = int(feature_len) /10
  if int(feature_len) < 10:
   return 'null'
   #continue
  else:
  # now calculate the coordinates for each of the 10 bins
   bin_start = start
   d_utr_5 = {}
   d_utr_3 = {}
   for i in range(1,11):
    # set 1-9 first, then round up bin# 10 )
    if i != 10:
     bin_end = (int(bin_start) +int(bin_len)) -1
     if str(type) == 'utr_5':
      d_utr_5[i] = str(bin_start)+','+str(bin_end)
     elif str(type) == 'utr_3':
      d_utr_3[i] = str(bin_start)+','+str(bin_end)
     else:
      pass
     #now set new bin_start
     bin_start = int(bin_end) + 1
    # now round up last bin
    else:
     bin_end = end
     if str(type) == 'utr_5':
      d_utr_5[i] = str(bin_start)+','+str(bin_end)
     elif str(type) == 'utr_3':
      d_utr_3[i] = str(bin_start)+','+str(bin_end)
     else:
      pass
  if str(type) == 'utr_5':
   return d_utr_5
  elif  str(type) == 'utr_3':
   return d_utr_3

関数を呼び出して辞書にアクセスしようとしています

def main():
  # get a list of all the mrnas in the db
  mrna_list = get_mrna()
  for mrna_id in mrna_list:
   print '-----'
   print mrna_id
   mrna_features = features(mrna_id)
   # if feature utr, send to models2bins_utr and return dict
   for feature in mrna_features:
    id = feature[0]
    type = feature[1]
    start = feature[2]
    end = feature[3]
    assembly = feature[4]
    strand = feature[5]
   if str(type) == 'utr_5' or str(type) == 'utr_3':
    bin_mapping = models2bins_utr(id,type,start,end,strand)
    print bin_mapping
    print bin_mapping.keys()
4

2 に答える 2

2

早い段階で文字列を返します。

bin_len = int(feature_len) /10
if int(feature_len) < 10:
    return 'null'

おそらく、代わりにここで例外を発生させたいか、少なくとも空の辞書を返すかNone、フラグ値として使用したいでしょう。

Nonedo test を使用する場合:

bin_mapping = models2bins_utr(id,type,start,end,strand)
if bin_mapping is not None:
     # you got a dictionary.
于 2013-10-03T09:04:47.157 に答える
0

私は何return 'null'を達成することになっているのだろうかと思っています。私の推測では、時々、間違ったパラメーターで関数を呼び出して、この文字列を取得することがあります。

raise Exception('Not enough arguments')代わりに(または同様の)例外をスローするか、空の辞書を返すことをお勧めします。

repr()また、デバッグを容易にするオブジェクトに関する詳細情報が得られるため、についても学ぶ必要があります。

于 2013-10-03T09:04:02.180 に答える