我有一个包含一个单词后跟多个数字的列表。有些人用逗号分隔我的空格。我正在尝试将单词作为字典中的键,然后将每个数字拆分为单独的列表,并将其存储为字典值。
输入:
my_list = ['word 1234 123 1', 'word 123 43 564', 'somethingelse 123,4124,56', etc...]
输出:
my_dict = {'word': ['1234', '123', '1'],
'word': ['123', '43', '564'], 'somethingelse': '123', '4124', '56' ]}
到目前为止,我已尝试创建要删除的单词以及不同的正则表达式:
re.sub(r'([^\s\w]|_)+', '', str(my_list))
stopwords = ['word']
querywords = my_list.split()
resultwords = [word for word in querywords if word.lower() not in stopwords]
result = ' '.join(resultwords)
re.findall('\d+|\D+', my_list)
我在某些词之前写了这个方法来分割:
def removeBeforeX(self, x, listIn, listOut):
for item in listIn:
if x in item:
a,b = item.split(x)
listOut.append(b)
else:
listOut.append(item)
return listOut
我不一定需要这个词作为键,因为键在词典中必须是唯一的,但我确实需要将这些词分开但将它们放在一个列表中。
答案 0 :(得分:1)
有什么问题?
>>> import re
>>> my_dict={}
>>> my_list = ['word1 1234 123 1', 'word2 123 43 564', 'somethingelse 123,4124,56']
>>> for i in my_list:
... parts = re.split(r'[, ]', i)
... my_dict[parts[0]] = parts[1:]
...
>>> my_dict
{'word2': ['123', '43', '564'], 'somethingelse': ['123', '4124', '56'], 'word1': ['1234', '123', '1']}
显然,你不能两次使用相同的密钥,否则会覆盖该值。
没有re模块的方法:
>>> for i in my_list:
... parts = i.replace(',', ' ').split()
... my_dict[parts[0]] = parts[1:]
...
答案 1 :(得分:1)
我会使用分区方法将字符串与re和findall结合起来
import re
my_dict = {}
my_list = ['wordA 1234 123 1', 'wordB 123 43 564', 'somethingelse 123,4124,56']
for item in my_list:
my_dict[item.partition(' ')[0]] = re.findall('\d+', item)
print my_dict
以上代码将生成以下字典
{'wordA': ['1234', '123', '1'], 'wordB': ['123', '43', '564'], 'somethingelse': ['123', '4124', '56']}
IF 您希望多次使用相同的单词,您需要重写循环以检查密钥是否存在,并将新值附加到现有列表中。
如果不需要字典,我会使用re和list comprehension
my_newlist = [re.findall('\d+', item) for item in my_list]
print my_newlist
上面的代码导致以下列表列表
[['1234', '123', '1'], ['123', '43', '564'], ['123', '4124', '56']]