0

を使用してcollections.defaultdict(list)います。

私のプリントは次のようになります。

{ 'A': [{'UNP': 'P01899'}],
  'C': [{'PDB': '2VE6'}], 
  'B': [{'PDB': '2VE6'}, {'UNP': 'P01887'}], 
  'E': [{'PDB': '2VE6'}, {'UNP': 'P01887'}],
  'D': [{'UNP': 'P01899'}],
  'G': [{'UNP': 'P01899'}],
  'F': [{'PDB': '2VE6'}], 
  'I': [{'PDB': '2VE6'}],
  'H': [{'PDB': '2VE6'}, {'UNP': 'P01887'}],
  'K': [{'PDB': '2VE6'}, {'UNP': 'P01887'}],
  'J': [{'UNP': 'P01899'}], 
  'L': [{'PDB': '2VE6'}] }

私がやりたいのは'UNP'、 if only'PDB'と no 'UNP'then を別のことをする if do something 句を使用することです。

私はスクリプト作成に非常に慣れていません。そのため、どんな助けも大歓迎です。ありがとう

4

2 に答える 2

1

一つの方法は

>>> for key,val in my_dict.items():
...     keys = [v.keys()[0] for v in val]
...     if "UNP" in keys: print "UNP in",key
...     elif "PDB" in keys: print "PDB in",key
...
UNP in A
PDB in C
UNP in B
UNP in E
UNP in D
UNP in G
PDB in F
PDB in I
UNP in H
UNP in K
UNP in J
PDB in L
>>>
于 2012-09-30T21:24:26.130 に答える
0

各アイテムが最大 1 つの「UNP」と最大 1 つの「PDB」のみを持つことができる場合は、最初に defaultdict(dict) を使用する必要があります。次に、次のような挿入を行うことができます。

mydict['A']['UNP'] = 'P01899'

そして、次のようなデータ構造を自動的かつ簡単に取得します

{ 'A': {'UNP': 'P01899'},
  'C': {'PDB': '2VE6'}, 
  'B': {'PDB': '2VE6', 'UNP': 'P01887'}, 
  'E': {'PDB': '2VE6', 'UNP': 'P01887'},
  'D': {'UNP': 'P01899'},
  'G': {'UNP': 'P01899'},
  'F': {'PDB': '2VE6'}, 
  'I': {'PDB': '2VE6'},
  'H': {'PDB': '2VE6', 'UNP': 'P01887'},
  'K': {'PDB': '2VE6', 'UNP': 'P01887'},
  'J': {'UNP': 'P01899'}, 
  'L': {'PDB': '2VE6'} }

次に、必要なものは非常に簡単です。

itemA = mydict['A']
if 'UNP' in itemA:
    # now we have 'UNP'
elif 'PDB' in itemA:
    # now we have PDB but not UNP
于 2012-09-30T22:54:23.897 に答える