python列表对象相同_Python:如何根据对象的特征或属性对对象列表进行分组?

I want to separate a list of objects into sublists, where objects with same attribute/characteristic stay in the same sublist.

Suppose we have a list of strings:

["This", "is", "a", "sentence", "of", "seven", "words"]

We want to separate the strings based on their length as follows:

[['sentence'], ['a'], ['is', 'of'], ['This'], ['seven', 'words']]

The program I currently come up with is this

sentence = ["This", "is", "a", "sentence", "of", "seven", "words"]

word_len_dict = {}

for word in sentence:

if len(word) not in word_len_dict.keys():

word_len_dict[len(word)] = [word]

else:

word_len_dict[len(word)].append(word)

print word_len_dict.values()

I want to know if there is a better way to achieve this?

解决方案

Take a look at itertools.groupby(). Note your list must be sorted first (more expensive than your method OP).

>>> from itertools import groupby

>>> l = ["This", "is", "a", "sentence", "of", "seven", "words"]

>>> print [list(g[1]) for g in groupby(sorted(l, key=len), len)]

[['a'], ['is', 'of'], ['This'], ['seven', 'words'], ['sentence']]

or if you want a dictionary ->

>>> {k:list(g) for k, g in groupby(sorted(l, key=len), len)}

{8: ['sentence'], 1: ['a'], 2: ['is', 'of'], 4: ['This'], 5: ['seven', 'words']}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值