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

2024-10-03 04:28:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

例如,“Mittelstreckenraketen”有3个分解/拆分:

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

而“Rheinhausener”只有一个:

'Rhein=Hausener '

该列表的长度约为50000个元素。你知道吗

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

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

从而丢弃如下元素:

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

我想在列表中循环,每次出现一个或多个等号为“=”的元素时,取前面的元素并将其存储为键。但是我是一个Python新手,不知道如何解释每个字典条目的任意数量的值;所以我非常感谢任何帮助。你知道吗


Tags: 元素列表my名词mittelrheinmittelstreckenraketenstrecken
2条回答

您可以使用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']})

它假设它看到的最后一个没有“=”字符的项目,就是我们试图分解的单词。你知道吗

这里有一种方法,使用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']

请注意,如果关键元素没有紧跟在一系列分解之前,则此代码将无法正常工作。你知道吗

相关问题 更多 >