2012-09-30 45 views
0

我使用collections.defaultdict(list)python字典使用defaultdict(列表)

我打印如下所示:

{ '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'做一些事情,如果只'PDB'並沒有'UNP'然後做不同的事情。

我對腳本非常陌生。所以任何幫助,高度讚賞。 感謝

+2

如果''UNP''哪裏?在整個外部字典? –

+5

在我看來,你應該使用字典的字典,而不是字典的字典。 –

+0

你的問題很難理解。你的意思是你想要以某種方式處理你的結構?如果你只是想使用它,它來自哪裏並不重要,所以你是否用'defaultdict'創建它並不重要。無論如何,您需要舉例說明您想要做什麼,使用代碼或至少使用僞代碼。 – BrenBarn

回答

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 
>>> 
0

如果每個項目只能有多達1「UNP」,只有達到1「PDB」,你應該使用在開始defaultdict(字典)。然後,你可以做插入這樣的:

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