我在Python中有一个列表,每个元素都是一个德语单词,例如:
my_list = [..., 'Stahl ', 'Stahl ', 'Die ', '*die ', 'Rheinhausener ', 'Rhein=Hausener ', 'Mittelstreckenraketen', 'Mittel=Strecken=Rakete', 'Mittel=strecken=Rakete', 'Mittels=trecken=Rakete',...]
在这个列表中,复合名词后面紧跟着它们可能的分解/分裂(可以有任意数量的分解/分裂)
e.g。 ' Mittelstreckenraketen'有3个分解/分裂:
' Rheinhausener'只有一个:' Mittel = Strecken = Rakete',' Mittel = strecken = Rakete',' Mittels = trecken = Rakete'
'莱茵=豪森'
该列表的长度约为50,000个元素。
我想要做的只是提取复合名词及其分解/分裂,(丢弃列表中的所有其他元素)并将它们读入以复合名词为键的字典,并将分解/拆分为价值观,例如:
my_dict = {...,'Rheinhausener ': ['Rhein=Hausener '], 'Mittelstreckenraketen': ['Mittel=Strecken=Rakete', 'Mittel=strecken=Rakete', 'Mittels=trecken=Rakete'],...}
从而丢弃诸如以下元素:
' Stahl',' Stahl',' Die',' * die'
我在考虑循环浏览列表,每次有一个或多个元素等于符号' ='出现,取出前面的元素并将其存储为密钥。但是我太多的Python新手要弄清楚如何为每个字典条目考虑任意数量的值;所以我感谢任何帮助。
答案 0 :(得分: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 :(得分: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']})
它假设它看到的最后一个项目中没有'='字符,是我们试图得到分解的词。