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)
由于默认情况下也会分裂(被认为是空白区域),因此您可以通过使用看起来相当优雅的方式来获得功能性方法:str.split
'\t'
'\t'
dict
map
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
使用字符串示例列表相同的结果.
通过简单的字典理解和 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
两次,这不是最佳的。这里的其他答案在没有字典理解的情况下做得更好。