Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python itertools.groupby()按字符串的第一个字符对字符串列表进行分组?_Python_String_Itertools - Fatal编程技术网

如何使用python itertools.groupby()按字符串的第一个字符对字符串列表进行分组?

如何使用python itertools.groupby()按字符串的第一个字符对字符串列表进行分组?,python,string,itertools,Python,String,Itertools,我有一个类似于此列表的字符串列表: tags = ('apples', 'apricots', 'oranges', 'pears', 'peaches') 我应该如何使用itertools.groupby()按每个字符串中的第一个字符对列表进行分组?如何提供itertools.groupby()所需的“key”参数?另一种方法 >>> from collections import defaultdict >>> t=defaultdict(list) &

我有一个类似于此列表的字符串列表:

tags = ('apples', 'apricots', 'oranges', 'pears', 'peaches')
我应该如何使用itertools.groupby()按每个字符串中的第一个字符对列表进行分组?如何提供itertools.groupby()所需的“key”参数?

另一种方法

>>> from collections import defaultdict
>>> t=defaultdict(list)
>>> for items in tags:
...     t[items[0]].append(items)
...
>>> t
defaultdict(<type 'list'>, {'a': ['apples', 'apricots'], 'p': ['pears', 'peaches'], 'o': ['oranges']})
>>从集合导入defaultdict
>>>t=默认dict(列表)
>>>对于标记中的项目:
...     t[项目[0]]。追加(项目)
...
>>>t
defaultdict(,{'a':['Apple','apricots','p':['pears','peaches','o':['oranges']})

您可能希望在以后创建
dict

from itertools import groupby

d = {k: list(v) for k, v in groupby(sorted(tags), key=lambda x: x[0])}

它在unicodes上工作。如果您询问它是否适用于UTF-8字符串,那么您应该询问何时应该将其解码为unicode。当然,答案是它一进来就可以了。谢谢,它按预期工作。我有一个多语言的标签列表,我将使用各种翻译测试排序。实际上,它应该是:
groupby(sorted(tags),key=operator.itemgetter(0))
…但别忘了先排序!
>>> from collections import defaultdict
>>> t=defaultdict(list)
>>> for items in tags:
...     t[items[0]].append(items)
...
>>> t
defaultdict(<type 'list'>, {'a': ['apples', 'apricots'], 'p': ['pears', 'peaches'], 'o': ['oranges']})
from itertools import groupby

d = {k: list(v) for k, v in groupby(sorted(tags), key=lambda x: x[0])}