我有一个我正在阅读的文件,然后创建嵌套列表,然后我想对4元素进行排序(zipcode)
jk43:23 Marfield Lane:Plainview:NY:10023
axe99:315 W. 115th Street, Apt. 11B:New York:NY:10027
jab44:23 Rivington Street, Apt. 3R:New York:NY:10002
ap172:19 Boxer Rd.:New York:NY:10005
jb23:115 Karas Dr.:Jersey City:NJ:07127
jb29:119 Xylon Dr.:Jersey City:NJ:07127
ak9:234 Main Street:Philadelphia:PA:08990
这是我的代码:
ex3_3 = open('ex1.txt')
exw = open('ex2_sorted.txt', 'w')
data = []
for line in ex3_3:
items = line.rstrip().split(':')
data.append(items)
print sorted(data, key=operator.itemgetter(4))
输出:
[['jb23', '115 Karas Dr.', 'Jersey City', 'NJ', '07127'], ['jb29', '119 Xylon Dr.', 'Jersey City', 'NJ', '07127'], ['ak9', '234 Main Street', 'Philadelphia', 'PA', '08990'], ['jab44', '23 Rivington Street, Apt. 3R', 'New York', 'NY', '10002'], ['ap172', '19 Boxer Rd.', 'New York', 'NY', '10005'], ['jk43', '23 Marfield Lane', 'Plainview', 'NY', '10023'], ['axe99', '315 W. 115th Street, Apt. 11B', 'New York', 'NY', '10027']]
这一切都运行正常,我只是想知道是否有办法在不使用“导入运算符”的情况下执行此操作?
答案 0 :(得分:6)
哦,是的,有办法:
print sorted(data,key=lambda x: x[4])
答案 1 :(得分:3)
粗略的工作方式是:
print sorted(data, key=lambda items: items[4])
但operator.itemgetter
有点快。我正在使用这个程序对两种方法进行基准测试:
#!/usr/bin/env python
import timeit
withlambda = 'lst.sort(key=lambda items: items[4])'
withgetter = 'lst.sort(key=operator.itemgetter(4))'
setup = """\
import random
import operator
random.seed(0)
lst = [(random.randrange(100000), random.randrange(100000), random.randrange(100000), random.randrange(100000) ,random.randrange(100000))
for _ in range(10000)]
"""
n = 10000
print "With lambda:"
print timeit.timeit(withlambda, setup, number=n)
print "With getter:"
print timeit.timeit(withgetter, setup, number=n)
它会创建一个包含100,000个5项元组的随机列表,然后在列表中运行sort()
1,000次。在我的带有Python 2.7.2的MacBook Pro上,withlambda
版本运行大约55.4秒,withgetter
运行大约46.1秒。
请注意,随着列表变大,排序算法本身所花费的时间比获取密钥所花费的时间增长得更快。因此,如果你要排序很多小清单,差异就会大得多。使用1,000个项目列表运行相同的测试重复100,000次,withlambda
产生22.4s而withgetter
产生12.5s。
答案 2 :(得分:0)
构建或重新组织子列表,以便首先排序要排序的事物。在您的情况下,邮政编码而不是元素4应该是元素0.然后您可以对它们进行排序。
当然,也必须考虑这种排序对数据其他用途的适用性。