如何在python中按列对文本文件中的项进行排序

如何在python中按列对文本文件中的项进行排序,python,python-3.x,columnsorting,Python,Python 3.x,Columnsorting,我的文本文件中有以下项目,其中包含城市名称和季度收入: Atlanta 40 50 23 18 Denver 56 78 34 11 Miami 40 34 18 30 Orlando 55 67 23 11 Memphis 44 23 56 11 Boston 55 67 33 23 Tampa 45 67 54 77 我对列表中的季度收入排序有问题。我目前的计划是这样的 with open('revenue.txt', 'r') as

我的文本文件中有以下项目,其中包含城市名称和季度收入:

 Atlanta   40 50 23 18
 Denver    56 78 34 11
 Miami     40 34 18 30
 Orlando   55 67 23 11
 Memphis   44 23 56 11
 Boston    55 67 33 23
 Tampa     45 67 54 77
我对列表中的季度收入排序有问题。我目前的计划是这样的

with open('revenue.txt', 'r') as f:
text = [line.split() for line in f]
print("{:<12}{:<14}{:>10}{:>9}".format("City", "Revenue", "Total", 
"Average"))
for a in text:
    city = a[0]
    revenue = [int(i) for i in a[1:5]]
    total = sum(revenue)
    avg = sum(revenue)/len(revenue)
    print("{:<12}{}{:>6}{:>9.2f}".format(city, revenue, total, avg))

print("\n""Sort the cities by their Quarter 1 revenues.")

print("\n""Sort the cities by their Quarter 3 revenues.")

print("\n""Sort the cities by their total revenues.")

任何帮助都将不胜感激。

您可以按如下方式进行排序:

text = [ 
["Atlanta", 40,50,23,18 ],
["Denver ", 56,78,34,11 ],
["Miami  ", 40,34,18,30 ],
["Orlando", 55,67,23,11 ],
["Memphis", 44,23,56,11 ],
["Boston ", 55,67,33,23 ],
["Tampa  ", 45,67,54,77 ]]


for a in text:
    city = a[0]
    revenue = [int(i) for i in a[1:5]]
    total = sum(revenue)
    avg = sum(revenue)/len(revenue)
  #  print("{:<12}{}{:>6}{:>9.2f}{:>9.2f}{:>9.2f}".format(city, revenue, total, avg))
    a.append(total) # append it to your former array
    a.append(avg)   # append it to your former array


print ("1.Q")
printIt(sorted(text, key=lambda x: x[1])) # sort by 1. Quarter number
print ("2.Q")
printIt(sorted(text, key=lambda x: x[2])) # sort by 2. Quarter number
print ("3.Q")
printIt(sorted(text, key=lambda x: x[3])) # etc.
print ("4.Q")
printIt(sorted(text, key=lambda x: x[4]))
print ("Total")
printIt(sorted(text, key=lambda x: x[5]))
print ("Avg")
printIt(sorted(text, key=lambda x: x[6]))

这会将中显示的内容应用于您的问题。标记为重复的问题。

您可以按如下方式对其排序:

text = [ 
["Atlanta", 40,50,23,18 ],
["Denver ", 56,78,34,11 ],
["Miami  ", 40,34,18,30 ],
["Orlando", 55,67,23,11 ],
["Memphis", 44,23,56,11 ],
["Boston ", 55,67,33,23 ],
["Tampa  ", 45,67,54,77 ]]


for a in text:
    city = a[0]
    revenue = [int(i) for i in a[1:5]]
    total = sum(revenue)
    avg = sum(revenue)/len(revenue)
  #  print("{:<12}{}{:>6}{:>9.2f}{:>9.2f}{:>9.2f}".format(city, revenue, total, avg))
    a.append(total) # append it to your former array
    a.append(avg)   # append it to your former array


print ("1.Q")
printIt(sorted(text, key=lambda x: x[1])) # sort by 1. Quarter number
print ("2.Q")
printIt(sorted(text, key=lambda x: x[2])) # sort by 2. Quarter number
print ("3.Q")
printIt(sorted(text, key=lambda x: x[3])) # etc.
print ("4.Q")
printIt(sorted(text, key=lambda x: x[4]))
print ("Total")
printIt(sorted(text, key=lambda x: x[5]))
print ("Avg")
printIt(sorted(text, key=lambda x: x[6]))

这会将中显示的内容应用于您的问题。将问题标记为重复。

我会使用字典和列表来增加排序的可读性以及代码的可用性。我接着实现了一个用于打印表的函数(因为您在函数中执行了多次)。我还添加了一个字典列表作为新的数据集。然后,我使用函数
sorted
来构建新组织的列表

with open('revenue.txt', 'r') as f:
    def print_table(data):
        for value in data:
            print("{city:<12}{revenue}{total:>6}{avg:>9.2f}".format(**value))
    text = [line.split() for line in f]
    data = []
    for a in text:
        revenue = [int(i) for i in a[1:5]]
        data.append({
            'city': a[0],
            'revenue': revenue,
            'total' : sum(revenue),
            'avg' : sum(revenue)/len(revenue)
        })
    print("\n""Original data set.")
    print_table(data)

    print("\n""Sort the cities by their Quarter 1 revenues.")
    print_table(sorted(data,key=lambda a: a['revenue'][0]))   

    print("\n""Sort the cities by their Quarter 3 revenues.")
    print_table(sorted(data,key=lambda a: a['revenue'][2]))   

    print("\n""Sort the cities by their total revenues.")
    print_table(sorted(data,key=lambda a: a['total']))   
以open('revenue.txt',r')作为f的
:
def打印表格(数据):
对于数据中的值:
打印(“{city:6}{avg:>9.2f}”。格式(**值))
text=[line.split()表示f中的行]
数据=[]
对于文本中的文本:
收益=[1:5]中i的int(i)]
data.append({
“城市”:a[0],
“收入”:收入,
“总计”:总额(收入),
“平均”:总和(收入)/长度(收入)
})
打印(“\n”“原始数据集”)
打印表格(数据)
打印(“\n”“按第一季度收入对城市进行排序。”)
打印表格(已排序(数据,键=λa:a['revenue'][0]))
打印(“\n”“按第三季度收入对城市进行排序。”)
打印表格(已排序(数据,键=λa:a['revenue'][2]))
打印(“\n”“按总收入对城市进行排序。”)
打印表格(已排序(数据,键=lambda:a['total']))

我会使用字典和列表来提高排序的可读性和代码的可用性。我接着实现了一个用于打印表的函数(因为您在函数中执行了多次)。我还添加了一个字典列表作为新的数据集。然后,我使用函数
sorted
来构建新组织的列表

with open('revenue.txt', 'r') as f:
    def print_table(data):
        for value in data:
            print("{city:<12}{revenue}{total:>6}{avg:>9.2f}".format(**value))
    text = [line.split() for line in f]
    data = []
    for a in text:
        revenue = [int(i) for i in a[1:5]]
        data.append({
            'city': a[0],
            'revenue': revenue,
            'total' : sum(revenue),
            'avg' : sum(revenue)/len(revenue)
        })
    print("\n""Original data set.")
    print_table(data)

    print("\n""Sort the cities by their Quarter 1 revenues.")
    print_table(sorted(data,key=lambda a: a['revenue'][0]))   

    print("\n""Sort the cities by their Quarter 3 revenues.")
    print_table(sorted(data,key=lambda a: a['revenue'][2]))   

    print("\n""Sort the cities by their total revenues.")
    print_table(sorted(data,key=lambda a: a['total']))   
以open('revenue.txt',r')作为f的
:
def打印表格(数据):
对于数据中的值:
打印(“{city:6}{avg:>9.2f}”。格式(**值))
text=[line.split()表示f中的行]
数据=[]
对于文本中的文本:
收益=[1:5]中i的int(i)]
data.append({
“城市”:a[0],
“收入”:收入,
“总计”:总额(收入),
“平均”:总和(收入)/长度(收入)
})
打印(“\n”“原始数据集”)
打印表格(数据)
打印(“\n”“按第一季度收入对城市进行排序。”)
打印表格(已排序(数据,键=λa:a['revenue'][0]))
打印(“\n”“按第三季度收入对城市进行排序。”)
打印表格(已排序(数据,键=λa:a['revenue'][2]))
打印(“\n”“按总收入对城市进行排序。”)
打印表格(已排序(数据,键=lambda:a['total']))

您可以使用
pandas
。事情很简单:

import pandas

with open('revenue.txt', 'r') as f:
    text = [line.split() for line in f]

df = pandas.DataFrame(text, columns = ["City", "Revenue", "Total", "Average", "Other"])
df_sorted_by_Total = df.sort_values("Total", ascending=True) # Sort by values of the City column

print(df_sorted_by_Total)
print(df_sorted_by_Total["City"].tolist()) # Print City column as list
输出:

1.Q
[ ['Atlanta', 40, 50, 23, 18, 131, 32.75], 
  ['Miami  ', 40, 34, 18, 30, 122, 30.5],
  ['Memphis', 44, 23, 56, 11, 134, 33.5], 
  ['Tampa  ', 45, 67, 54, 77, 243, 60.75], 
  ['Orlando', 55, 67, 23, 11, 156, 39.0], 
  ['Boston ', 55, 67, 33, 23, 178, 44.5], 
  ['Denver ', 56, 78, 34, 11, 179, 44.75]]

2.Q
[ ['Memphis', 44, 23, 56, 11, 134, 33.5], 
  ['Miami  ', 40, 34, 18, 30, 122, 30.5],
  ['Atlanta', 40, 50, 23, 18, 131, 32.75],
  ['Orlando', 55, 67, 23, 11, 156, 39.0], 
  ['Boston ', 55, 67, 33, 23, 178, 44.5], 
  ['Tampa  ', 45, 67, 54, 77, 243, 60.75], 
  ['Denver ', 56, 78, 34, 11, 179, 44.75]]

3.Q
[ ['Miami  ', 40, 34, 18, 30, 122, 30.5],
  ['Atlanta', 40, 50, 23, 18, 131, 32.75], 
  ['Orlando', 55, 67, 23, 11, 156, 39.0], 
  ['Boston ', 55, 67, 33, 23, 178, 44.5], 
  ['Denver ', 56, 78, 34, 11, 179, 44.75],
  ['Tampa  ', 45, 67, 54, 77, 243, 60.75], 
  ['Memphis', 44, 23, 56, 11, 134, 33.5]]

4.Q
[ ['Denver ', 56, 78, 34, 11, 179, 44.75], 
  ['Orlando', 55, 67, 23, 11, 156, 39.0],
  ['Memphis', 44, 23, 56, 11, 134, 33.5],
  ['Atlanta', 40, 50, 23, 18, 131, 32.75],
  ['Boston ', 55, 67, 33, 23, 178, 44.5],
  ['Miami  ', 40, 34, 18, 30, 122, 30.5], 
  ['Tampa  ', 45, 67, 54, 77, 243, 60.75]]

Total
[ ['Miami  ', 40, 34, 18, 30, 122, 30.5], 
  ['Atlanta', 40, 50, 23, 18, 131, 32.75],
 ['Memphis', 44, 23, 56, 11, 134, 33.5], 
  ['Orlando', 55, 67, 23, 11, 156, 39.0],
  ['Boston ', 55, 67, 33, 23, 178, 44.5],
  ['Denver ', 56, 78, 34, 11, 179, 44.75], 
  ['Tampa  ', 45, 67, 54, 77, 243, 60.75]]

Avg
[ ['Miami  ', 40, 34, 18, 30, 122, 30.5], 
  ['Atlanta', 40, 50, 23, 18, 131, 32.75],
  ['Memphis', 44, 23, 56, 11, 134, 33.5],
  ['Orlando', 55, 67, 23, 11, 156, 39.0],
  ['Boston ', 55, 67, 33, 23, 178, 44.5],
  ['Denver ', 56, 78, 34, 11, 179, 44.75], 
  ['Tampa  ', 45, 67, 54, 77, 243, 60.75]] 
      City Revenue Total Average Other
4  Memphis      44    23      56    11
2    Miami      40    34      18    30
0  Atlanta      40    50      23    18
3  Orlando      55    67      23    11
5   Boston      55    67      33    23
6    Tampa      45    67      54    77
1   Denver      56    78      34    11
['Memphis', 'Miami', 'Atlanta', 'Orlando', 'Boston', 'Tampa', 'Denver']

您可以使用
pandas
。事情很简单:

import pandas

with open('revenue.txt', 'r') as f:
    text = [line.split() for line in f]

df = pandas.DataFrame(text, columns = ["City", "Revenue", "Total", "Average", "Other"])
df_sorted_by_Total = df.sort_values("Total", ascending=True) # Sort by values of the City column

print(df_sorted_by_Total)
print(df_sorted_by_Total["City"].tolist()) # Print City column as list
输出:

1.Q
[ ['Atlanta', 40, 50, 23, 18, 131, 32.75], 
  ['Miami  ', 40, 34, 18, 30, 122, 30.5],
  ['Memphis', 44, 23, 56, 11, 134, 33.5], 
  ['Tampa  ', 45, 67, 54, 77, 243, 60.75], 
  ['Orlando', 55, 67, 23, 11, 156, 39.0], 
  ['Boston ', 55, 67, 33, 23, 178, 44.5], 
  ['Denver ', 56, 78, 34, 11, 179, 44.75]]

2.Q
[ ['Memphis', 44, 23, 56, 11, 134, 33.5], 
  ['Miami  ', 40, 34, 18, 30, 122, 30.5],
  ['Atlanta', 40, 50, 23, 18, 131, 32.75],
  ['Orlando', 55, 67, 23, 11, 156, 39.0], 
  ['Boston ', 55, 67, 33, 23, 178, 44.5], 
  ['Tampa  ', 45, 67, 54, 77, 243, 60.75], 
  ['Denver ', 56, 78, 34, 11, 179, 44.75]]

3.Q
[ ['Miami  ', 40, 34, 18, 30, 122, 30.5],
  ['Atlanta', 40, 50, 23, 18, 131, 32.75], 
  ['Orlando', 55, 67, 23, 11, 156, 39.0], 
  ['Boston ', 55, 67, 33, 23, 178, 44.5], 
  ['Denver ', 56, 78, 34, 11, 179, 44.75],
  ['Tampa  ', 45, 67, 54, 77, 243, 60.75], 
  ['Memphis', 44, 23, 56, 11, 134, 33.5]]

4.Q
[ ['Denver ', 56, 78, 34, 11, 179, 44.75], 
  ['Orlando', 55, 67, 23, 11, 156, 39.0],
  ['Memphis', 44, 23, 56, 11, 134, 33.5],
  ['Atlanta', 40, 50, 23, 18, 131, 32.75],
  ['Boston ', 55, 67, 33, 23, 178, 44.5],
  ['Miami  ', 40, 34, 18, 30, 122, 30.5], 
  ['Tampa  ', 45, 67, 54, 77, 243, 60.75]]

Total
[ ['Miami  ', 40, 34, 18, 30, 122, 30.5], 
  ['Atlanta', 40, 50, 23, 18, 131, 32.75],
 ['Memphis', 44, 23, 56, 11, 134, 33.5], 
  ['Orlando', 55, 67, 23, 11, 156, 39.0],
  ['Boston ', 55, 67, 33, 23, 178, 44.5],
  ['Denver ', 56, 78, 34, 11, 179, 44.75], 
  ['Tampa  ', 45, 67, 54, 77, 243, 60.75]]

Avg
[ ['Miami  ', 40, 34, 18, 30, 122, 30.5], 
  ['Atlanta', 40, 50, 23, 18, 131, 32.75],
  ['Memphis', 44, 23, 56, 11, 134, 33.5],
  ['Orlando', 55, 67, 23, 11, 156, 39.0],
  ['Boston ', 55, 67, 33, 23, 178, 44.5],
  ['Denver ', 56, 78, 34, 11, 179, 44.75], 
  ['Tampa  ', 45, 67, 54, 77, 243, 60.75]] 
      City Revenue Total Average Other
4  Memphis      44    23      56    11
2    Miami      40    34      18    30
0  Atlanta      40    50      23    18
3  Orlando      55    67      23    11
5   Boston      55    67      33    23
6    Tampa      45    67      54    77
1   Denver      56    78      34    11
['Memphis', 'Miami', 'Atlanta', 'Orlando', 'Boston', 'Tampa', 'Denver']
可能的重复可能的重复