在存在单词时对数字进行排序

时间:2015-05-13 19:21:02

标签: python sorting python-3.x

我一直在尝试创建一个程序,要求输入名称和年龄,并将它们存储到文本文件中。我的代码如下:

name_age=open('Name Age.txt','a')
print('1. Writing to a text file')
print('2. Reading a text file')
print('3. Sorting')
Choice=int(input('What do you want to do: '))

if Choice==1:
    Name=input('What is the Name: ')
    Age=int(input('What is the age: '))
    Name_Age=Name,Age
    name_age.write(repr(Name_Age),'\n')
    print('Written result')
if Choice==2:
    name_age=open('Name Age.txt','r')
    print('Reading the file')
    print(name_age.read(1000))
if Choice==3:
    print('Sorting')
    print('1. Alphabetical')
    print('2. Age')
    Choice=int(input('How do you want to sort(1/2): '))
    if Choice==1:
        print('Sorting Alphabetically')
        print(sorted(name_age))
    if Choice==2:
        print('Help Me HERE')
    #I Need Help here... How do you sort the textfile with the ages???

然后我的代码能够允许用户从程序中读取文件并对结果进行排序。我可以按字母顺序对结果进行排序,但我无法按年龄顺序对它们进行排序。你能帮帮我吗

2 个答案:

答案 0 :(得分:2)

您必须向我们展示您的文件的结构,但如果它类似于

mov edx, array ; [ebp + 8], right?
; then use edx instead of "array"... or so...

你可以做到

这可以通过在空格上拆分每一行,将其转换为bob 18 steve 28 mike 39 tom 22 ,然后按元素print(sorted(name_age, key = lambda i : int(i.split()[1]))) 中的数字而不是第一个元素(即其名称)进行排序。

编辑:
使用格式int,您将使用

[1]

编辑2:
要从最高到最低排序,请使用Hanzalah, 14参数

print(sorted(name_age, key = lambda i : int(i.split(',')[1])))

答案 1 :(得分:0)

您可以使用csv模块中的字典阅读器(DictReader)来分离读取输入文件内容和处理其内容。我们使用lambda函数来灵活选择要排序的字段。假设格式与@Cyber​​相同,您可以使用以下示例。

#Sample input file, eg, /tmp/sample.csv
name,age
bob,12
annie,20
suzie,5
wrothgar,15

以下是代码:

import csv

# You can change the path to your file accordingly
finput = file("/tmp/sample.csv",'r')

# Usually good to have this explicitly. You can use comma or tab, etc
delimiter=','

# Remove new line, then split the first line into the two fields
header = finput.readline().strip().split(delimiter) 

# Let's create our reader, and extract the entries in the file
reader = csv.DictReader(finput, fieldnames=header, delimiter=delimiter)
entries = [entry for entry in reader]

# Perform additional type checking for your input and even cast the 'age' value here instead of in the lambda function below

# Let's sort using sorted its two parameters 'key' and 'reverse'
sorted(entries, key=lambda entry: int(entry['age']))  # Sort using the age field
sorted(entries, key=lambda entry: int(entry['age']), reverse=True) # Sort using the age field, in reverse order
sorted(entries, key=lambda entry: entry['name']))  # Sort using the name field

希望这能让您直观地使用sorted的'key'参数,其中sorted函数的比较器使用传递给'key'的值。使用csv模块的实用程序类应该有助于其他数据处理项目,例如DictWriter。

古德勒克!