Python: 将列表分割成数组

2 投票
5 回答
2128 浏览
提问于 2025-04-16 08:28

我刚开始学习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))

撰写回答