从列表中填充字典

len*_*eth 5 python dictionary list python-3.x

我有一个字符串列表(来自.tt文件),如下所示:

list1 = ['have\tVERB', 'and\tCONJ', ..., 'tree\tNOUN', 'go\tVERB']
Run Code Online (Sandbox Code Playgroud)

我想把它变成一个看起来像的字典:

dict1 = { 'have':'VERB', 'and':'CONJ', 'tree':'NOUN', 'go':'VERB' }
Run Code Online (Sandbox Code Playgroud)

我在考虑替代,但它效果不好.有没有办法将标签字符串标记'\t'为分隔符?

ett*_*any 16

请尝试以下方法:

dict1 = dict(item.split('\t') for item in list1)
Run Code Online (Sandbox Code Playgroud)

输出:

>>>dict1
{'and': 'CONJ', 'go': 'VERB', 'tree': 'NOUN', 'have': 'VERB'}
Run Code Online (Sandbox Code Playgroud)

  • `[]`是冗余的,生成器表达式可以正常工作,并且在进程中将使用更少的内存. (5认同)

Jim*_*ard 7

由于默认情况下也会分裂(被认为是空白区域),因此您可以通过使用看起来相当优雅的方式来获得功能性方法:str.split '\t''\t'dictmap

d = dict(map(str.split, list1))
Run Code Online (Sandbox Code Playgroud)

随着字典d现在处于通缉形式:

print(d)
{'and': 'CONJ', 'go': 'VERB', 'have': 'VERB', 'tree': 'NOUN'}
Run Code Online (Sandbox Code Playgroud)

如果您 需要'\t'(虽然忽略' ''\n')并且仍然想要使用该map方法,您可以创建一个functools.partial仅用'\t'作分隔符的部分对象:

from functools import partial 

# only splits on '\t' ignoring new-lines, white space e.t.c 
tabsplit = partial(str.split, sep='\t')
d = dict(map(tabsplit, list1)) 
Run Code Online (Sandbox Code Playgroud)

当然,这会产生与d使用字符串示例列表相同的结果.


Jea*_*bre 4

通过简单的字典理解和 a str.split(没有参数strip在空白处分割)来做到这一点

list1 = ['have\tVERB', 'and\tCONJ',  'tree\tNOUN', 'go\tVERB']
dict1 = {x.split()[0]:x.split()[1] for x in list1}
Run Code Online (Sandbox Code Playgroud)

结果:

{'and': 'CONJ', 'go': 'VERB', 'tree': 'NOUN', 'have': 'VERB'}
Run Code Online (Sandbox Code Playgroud)

编辑:x.split()[0]:x.split()[1]执行split两次,这不是最佳的。这里的其他答案在没有字典理解的情况下做得更好。