2015-07-02 105 views
3

我有一個列表在Python其中每個元素的單個德語單詞轉換一個列表的子集到一個字典,例如:的Python:通過匹配特定元素

my_list = [..., 'Stahl ', 'Stahl ', 'Die ', '*die ', 'Rheinhausener ', 'Rhein=Hausener ', 'Mittelstreckenraketen', 'Mittel=Strecken=Rakete', 'Mittel=strecken=Rakete', 'Mittels=trecken=Rakete',...] 

在該列表中,複合名詞將立即然後是可能的分解/分裂(可以有任意數量的分解/分裂)

例如'Mittelstreckenraketen' 具有3個分解/分割:

'密特爾= Strecken = Rakete', '密特爾= strecken = Rakete', 'Mittels = trecken = Rakete'

而 'Rheinhausener' 僅具有之一:

'萊茵= Hausener'

列表的長度爲約50000的元件。

我想要做的是隻提取複合名詞及其分解/拆分(丟棄列表中的所有其他元素)並將它們讀入以複合名詞爲關鍵詞的字典中,並將分解/拆分作爲值,例如:

my_dict = {...,'Rheinhausener ': ['Rhein=Hausener '], 'Mittelstreckenraketen': ['Mittel=Strecken=Rakete', 'Mittel=strecken=Rakete', 'Mittels=trecken=Rakete'],...} 

由此丟棄元素如:

'斯塔爾', '斯塔爾', '模', '*模'

我正在考慮循環訪問列表,每次出現帶有一個或多個等號'='的元素時,將前面的元素存儲爲密鑰。但我太多的Python新手想弄清楚如何解釋每個字典條目的任意數量的值;所以我感謝任何幫助。

回答

2

下面介紹一種使用defaultdict的方法。如果我們嘗試訪問不存在的密鑰,defaultdict會自動創建一個空列表。

#!/usr/bin/env python 

from collections import defaultdict 

my_list = [ 
    'Stahl ', 
    'Stahl ', 
    'Die ', 
    '*die ', 
    'Rheinhausener ', 
    'Rhein=Hausener ', 
    'Mittelstreckenraketen', 
    'Mittel=Strecken=Rakete', 
    'Mittel=strecken=Rakete', 
    'Mittels=trecken=Rakete' 
] 

my_dict = defaultdict(list) 

key = None 
for word in my_list: 
    if '=' in word: 
     if key is None: 
      print 'Error: No key found for', word 
     my_dict[key].append(word) 
    else: 
     key = word 

for key in my_dict: 
    print '%r: %r' % (key, my_dict[key]) 

輸出

'Rheinhausener ': ['Rhein=Hausener '] 
'Mittelstreckenraketen': ['Mittel=Strecken=Rakete', 'Mittel=strecken=Rakete', 'Mittels=trecken=Rakete'] 

注意,該代碼將無法正常工作,如果關鍵因素不會立即先於一系列分解的。

1

您可以使用defaultdict:

from collections import defaultdict 

my_list = ['Stahl ', 'Stahl ', 'Die ', '*die ', 'Rheinhausener ', 'Rhein=Hausener ', 'Mittelstreckenraketen', 'Mittel=Strecken=Rakete', 'Mittel=strecken=Rakete', 'Mittels=trecken=Rakete'] 

my_dict = defaultdict(list) 

value = '' 
for item in my_list: 
    if '=' not in item: 
    value = item 
    else: 
    my_dict[value].append(item) 

print my_dict 

它打印

defaultdict(<type 'list'>, {'Rheinhausener ': ['Rhein=Hausener '], 'Mittelstreckenraketen': ['Mittel=Strecken=Rakete', 'Mittel=strecken=Rakete', 'Mittels=trecken=Rakete']}) 

它假定它沒有「=」字在裏面看到的最後一個項目,是我們正在努力獲得了這個詞分解。

+0

乾杯!這足夠完成這項工作!我可以使用一些正則表達式清理其餘的數據(這是非常不規則的) – DVoll

相關問題