Python:通过匹配特定元素将列表的子集转换为字典

时间:2015-07-02 10:07:47

标签: python list dictionary

我在Python中有一个列表,每个元素都是一个德语单词,例如:

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

在这个列表中,复合名词后面紧跟着它们可能的分解/分裂(可以有任意数量的分解/分裂)

e.g。 ' Mittelstreckenraketen'有3个分解/分裂:

  

' Mittel = Strecken = Rakete',' Mittel = strecken = Rakete',' Mittels = trecken = Rakete'

' Rheinhausener'只有一个:

  

'莱茵=豪森'

该列表的长度约为50,000个元素。

我想要做的只是提取复合名词及其分解/分裂,(丢弃列表中的所有其他元素)并将它们读入以复合名词为键的字典,并将分解/拆分为价值观,例如:

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

从而丢弃诸如以下元素:

  

' Stahl',' Stahl',' Die',' * die'

我在考虑循环浏览列表,每次有一个或多个元素等于符号' ='出现,取出前面的元素并将其存储为密钥。但是我太多的Python新手要弄清楚如何为每个字典条目考虑任意数量的值;所以我感谢任何帮助。

2 个答案:

答案 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']})

它假设它看到的最后一个项目中没有'='字符,是我们试图得到分解的词。