Python: 将列表分割成数组
我刚开始学习Python,知道的东西少得可怜,感觉自己一无所知。我想找一些不同的方法,把一个列表拆分成字典的列表。比如说,有这样一个列表:
data = ['**adjective:**', 'nice', 'kind', 'fine',
'**noun:**', 'benefit', 'profit', 'advantage', 'avail', 'welfare', 'use', 'weal',
'**adverb:**', 'well', 'nicely', 'fine', 'right', 'okay']
我希望能得到:
[{'**adjective**': ('nice', 'kind', 'fine'),
'**noun**': ('benefit', 'profit', 'advantage', 'avail', 'welfare', 'use', 'weal'),
'**adverb**': ('well', 'nicely', 'fine', 'right', 'okay')}]
5 个回答
1
下面的代码会生成一个字典,每个单词后面都有一个冒号,表示字典里有一个条目。
data = ['adjective:', 'nice', 'kind', 'fine', 'noun:', 'benefit', 'profit', 'advantage', 'avail', 'welfare', 'use', 'weal', 'adverb:', 'well', 'nicely', 'fine', 'right', 'okay']
result = {}
key = None
for item in data:
if item.endswith(":"):
key = item[:-1]
result[key] = []
continue
result[key].append(item)
5
在编程中,我们常常会遇到一些问题,尤其是在使用某些工具或语言时。比如,有时候我们在写代码的时候,可能会发现某些功能没有按照我们的预期工作。这种情况可能会让人感到困惑,但其实这很正常。
很多时候,问题的根源可能在于我们对某些概念的理解不够深入。比如,变量的作用域、数据类型的转换,或者是函数的调用方式等。这些都是编程中非常基础但又容易被忽视的部分。
如果你在学习编程,遇到不明白的地方,不要气馁。可以通过查阅资料、请教他人或者在社区提问来解决这些问题。记住,编程是一项需要不断学习和实践的技能,遇到困难是成长的一部分。
总之,保持好奇心,勇于探索,慢慢你就会掌握这些知识,变得越来越熟练。
>>> data = ['adjective:', 'nice', 'kind', 'fine', 'noun:', 'benefit', 'profit', 'advantage', 'avail', 'welfare', 'use', 'weal', 'adverb:', 'well', 'nicely', 'fine', 'right', 'okay']
>>> from itertools import groupby
>>> dic = {}
>>> for i, j in groupby(data, key=lambda x: x.endswith(':')):
if i:
key = next(j).rstrip(':')
continue
dic[key] = list(j)
>>> dic
{'adjective': ['nice', 'kind', 'fine'], 'noun': ['benefit', 'profit', 'advantage', 'avail', 'welfare', 'use', 'weal'], 'adverb': ['well', 'nicely', 'fine', 'right', 'okay']}
10
这可能是你所问问题的一个接近的答案:
d = collections.defaultdict(list)
for s in data:
if s.endswith(":"):
key = s[:-1]
else:
d[key].append(s)
print d
# defaultdict(<type 'list'>,
# {'adjective': ['nice', 'kind', 'fine'],
# 'noun': ['benefit', 'profit', 'advantage', 'avail', 'welfare', 'use', 'weal'],
# 'adverb': ['well', 'nicely', 'fine', 'right', 'okay']})
补充:为了好玩,这里有一个受SilentGhost的回答启发的两行代码:
g = (list(v) for k, v in itertools.groupby(data, lambda x: x.endswith(':')))
d = dict((k[-1].rstrip(":"), v) for k, v in itertools.izip(g, g))