为嵌套列表中的元素排序嵌套列表?

2024-09-22 20:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

General Motors,Chevrolet,K1500 TAHOE 4WD,18,2900,Standard SUV 4WD
General Motors,Chevrolet,TRAVERSE AWD,19,2750,Standard SUV 4WD
Chrysler Group LLC,Dodge,Durango AWD,19,2750,Standard SUV 4WD
Chrysler Group LLC,Dodge,Durango AWD,16,3400,Standard SUV 4WD
Ford Motor Company,Ford,Expedition 4WD,17,3100,Standard SUV 4WD
Ford Motor Company,Ford,EXPLORER AWD,19,2750,Standard SUV 4WD

假设我有这些台词。如何根据每行中的第5个元素排列所有行?(第一行是18)


Tags: groupcompanystandardawdgeneralmotorfordllc
3条回答

它是第四个元素,因此可以使用lambda作为逗号上的键拆分:

 s="""
General Motors,Chevrolet,K1500 TAHOE 4WD,18,2900,Standard SUV 4WD
General Motors,Chevrolet,TRAVERSE AWD,19,2750,Standard SUV 4WD
Chrysler Group LLC,Dodge,Durango AWD,19,2750,Standard SUV 4WD
Chrysler Group LLC,Dodge,Durango AWD,16,3400,Standard SUV 4WD
Ford Motor Company,Ford,Expedition 4WD,17,3100,Standard SUV 4WD
Ford Motor Company,Ford,EXPLORER AWD,19,2750,Standard SUV 4WD
"""
print(sorted(s.splitlines()[1:],key=lambda x:x.split(",")[3]))

['Chrysler Group LLC,Dodge,Durango AWD,16,3400,Standard SUV 4WD', 'Ford Motor Company,Ford,Expedition 4WD,17,3100,Standard SUV 4WD', 'General Motors,Chevrolet,K1500 TAHOE 4WD,18,2900,Standard SUV 4WD', 'General Motors,Chevrolet,TRAVERSE AWD,19,2750,Standard SUV 4WD', 'Chrysler Group LLC,Dodge,Durango AWD,19,2750,Standard SUV 4WD', 'Ford Motor Company,Ford,EXPLORER AWD,19,2750,Standard SUV 4WD']

从文件读取:

with open("in.txt") as f:
    print(sorted(f,key=lambda x:x.split(",")[3]))
['Chrysler Group LLC,Dodge,Durango AWD,16,3400,Standard SUV 4WD\n', 'Ford Motor Company,Ford,Expedition 4WD,17,3100,Standard SUV 4WD\n', 'General Motors,Chevrolet,K1500 TAHOE 4WD,18,2900,Standard SUV 4WD\n', 'General Motors,Chevrolet,TRAVERSE AWD,19,2750,Standard SUV 4WD\n', 'Chrysler Group LLC,Dodge,Durango AWD,19,2750,Standard SUV 4WD\n', 'Ford Motor Company,Ford,EXPLORER AWD,19,2750,Standard SUV 4WD']

这类事情通常比较好,不必求助于lambda,而是使用operator.itemgetter

from operator import itemgetter    

data = """
General Motors,Chevrolet,K1500 TAHOE 4WD,18,2900,Standard SUV 4WD
General Motors,Chevrolet,TRAVERSE AWD,19,2750,Standard SUV 4WD
Chrysler Group LLC,Dodge,Durango AWD,19,2750,Standard SUV 4WD
Chrysler Group LLC,Dodge,Durango AWD,16,3400,Standard SUV 4WD
Ford Motor Company,Ford,Expedition 4WD,17,3100,Standard SUV 4WD
Ford Motor Company,Ford,EXPLORER AWD,19,2750,Standard SUV 4WD
"""

data_lines = [x.split(",") for x in data.splitlines()[1:]]

print sorted(data_lines, key=itemgetter(3))

# Optionally join back to strings:
map(",".join, sorted(data_lines, key=itemgetter(3)))

(可选)要将文件用作iterable方法,请执行以下操作:

from string import split
from functools import partial
from operator import itemgetter

getter = itemgetter(3)
splitter = partial(split, sep=",")

def sort_key(s):
    return getter(splitter(s))

with open("data_file.txt") as data:
    print sorted(data, key=sort_key))

这很好地分离了不同的部分(分割分隔符、用于排序的特定项索引以及对sorted的实际调用),否则这些部分在单个lambda中就耦合不良。你知道吗

你可以这样做:

l=[[1,2,3,4,8,6], [1,2,3,4,7,6]]
l.sort(key=lambda x: x[4]) 

我会列出你所有的名单。你知道吗

相关问题 更多 >