我有一个名为
的列表l=[('Altamont','TN'),('Baxter','TN'),('Norway','SC'),('Trenton','SC')]
最初,大约为('cities', 'states')
根据州和城市进行排序,并在功能下方写入CSV
,
def calcDistance(self):
filePath = self.dlg.fileNameEdit.text()
l=[('Altamont','TN'),('Baxter','TN'),('Norway','SC'),('Trenton','SC')]
sorted(l, key=operator.itemgetter(1,0))
self.writeToFile(l, filePath)
def writeToFile(self, l, filePath):
fileCSV = open(filePath, "w")
for i in l:
fileCSV.write(i)
fileCSV.write(",")
fileCSV.write("\n")
QMessageBox.information(self.dlg, "Number of Cities Near", str(len(lsOfCities)) + " citie(s) are written to "+filePath)
fileCSV.close()
self.dlg.close()
运行后,我将收到如下CSV
文件:
'Baxter','TN'
'Altamont','TN'
'Trenton','SC'
'Norway','SC'
我想知道 Python2.7
中是否有任何可能的方法,如果我对CSV
的第二列(即状态)进行排序,那么对应的单元格应该还要排序?
像
'Norway','SC'
'Trenton','SC'
'Altamont','TN'
'Baxter','TN'
答案 0 :(得分:2)
如果您想按state name
排序,然后按city name
排序,则流程代码为:
sorted(l, key=operator.itemgetter(1,0))
没有任何意义,因为l
仍然是不可变的。你应该重新分配:
l = sorted(l, key=operator.itemgetter(1,0))
在这次排序之后,我尝试了我的电脑:
>>> l = [('Altamont','TN'),('Baxter','TN'),('Norway','SC'),('Trenton','SC')]
>>> import operator
>>> l = sorted(l, key = operator.itemgetter(1,0))
>>> l
[('Norway', 'SC'), ('Trenton', 'SC'), ('Altamont', 'TN'), ('Baxter', 'TN')]
答案 1 :(得分:0)
您的问题是您正在对列表进行排序,而不是将其分配给任何内容。
def calcDistance(self):
filePath = self.dlg.fileNameEdit.text()
l = [('Altamont','TN'),('Baxter','TN'),('Norway','SC'),('Trenton','SC')]
l = sorted(l, key=operator.itemgetter(1,0))
见下面的例子:
>>> a = [4,3,2]
>>> sorted(a)
[2, 3, 4]
>>> a
[4, 3, 2]
>>>