假设我有一组数据对,其中索引0是值,索引1是类型:
input = [
('11013331', 'KAT'),
('9085267', 'NOT'),
('5238761', 'ETH'),
('5349618', 'ETH'),
('11788544', 'NOT'),
('962142', 'ETH'),
('7795297', 'ETH'),
('7341464', 'ETH'),
('9843236', 'KAT'),
('5594916', 'ETH'),
('1550003', 'ETH')
]
Run Code Online (Sandbox Code Playgroud)
我想按类型(按第一个索引字符串)对它们进行分组:
result = [
{
type:'KAT',
items: ['11013331', '9843236']
},
{
type:'NOT',
items: ['9085267', '11788544']
},
{
type:'ETH',
items: ['5238761', '962142', '7795297', '7341464', '5594916', '1550003']
}
]
Run Code Online (Sandbox Code Playgroud)
我怎样才能以有效的方式实现这一目标?
我有一个独特对象的平面列表,其中一些可能与其他对象共享一个给定的属性.我希望创建一个嵌套的列表列表,其中对象按给定属性分组.作为一个最小的例子,给出以下列表:
>>> flat = ["Shoes", "pants", "shirt", "tie", "jacket", "hat"]
Run Code Online (Sandbox Code Playgroud)
我可能想按长度分组,例如:
>>> nest_by_length(flat)
[['tie', 'hat'], ['shoes', 'pants', 'shirt'], ['jacket']]
Run Code Online (Sandbox Code Playgroud)
我见过几个类似的 问题和建议.但是,在所有这些情况下,嵌套都基于输入列表的顺序.在我的例子中,输入列表的排序是完全不可预测的,输出的子列表的数量和每个子列表的项目数量也是如此.
是否有标准功能或惯用方法来实现这一目标?
我按字符串中的第一个单词和最后一个单词对列表中的字符串元素进行分组。我正在使用groupbyfromitertools进行分组。该过程似乎对最后一个单词运行良好,但对第一个单词似乎效果不佳。
from itertools import groupby
model_eval_cols = ['MAD model meFuelFlowStar', 'MedAD model meFuelFlowStar', 'MAD model rpmStar', 'MedAD model rpmStar']
for k, v in groupby(model_eval_cols, key=lambda x: x.split(' ')[2]):
print(k, list(v))
Run Code Online (Sandbox Code Playgroud)
以上输出
meFuelFlowStar ['MAD model meFuelFlowStar', 'MedAD model meFuelFlowStar']
rpmStar ['MAD model rpmStar', 'MedAD model rpmStar']
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将字符串按第一个单词分组:
for k, v in groupby(model_eval_cols, key=lambda x: x.split(' ')[0]):
print(k, list(v))
Run Code Online (Sandbox Code Playgroud)
似乎不起作用
MAD ['MAD model meFuelFlowStar']
MedAD ['MedAD model meFuelFlowStar']
MAD ['MAD model rpmStar']
MedAD ['MedAD model rpmStar']
Run Code Online (Sandbox Code Playgroud)
这让我很惊讶,因为按键是相同的