使用python对联系人列表排序并将输出存储在JSON中
我有一个联系人列表文件“input.txt”,我想按LastName和FirstName排序。该文件还具有最喜爱的颜色和邮政编码 该文件的内容结构如下:使用python对联系人列表排序并将输出存储在JSON中,python,python-3.x,sorting,data-structures,Python,Python 3.x,Sorting,Data Structures,我有一个联系人列表文件“input.txt”,我想按LastName和FirstName排序。该文件还具有最喜爱的颜色和邮政编码 该文件的内容结构如下: LastName, FirstName, (123)-123-1234, Blue, 11013 FirstName LastName, Green, 12345, 123 123 1234 FirstName, LastName, 12345, 123 123 1234, Yellow input.txt: Annalee Loftis,
LastName, FirstName, (123)-123-1234, Blue, 11013
FirstName LastName, Green, 12345, 123 123 1234
FirstName, LastName, 12345, 123 123 1234, Yellow
input.txt:
Annalee Loftis, green, 74339, 360 105 7811
Quinton, Liptak, 87225, 194 974 1020, yellow
Demming, Kent, (753)-851-4445, blue, 81403
Humperdink, Englebert G., (232)-955-1267, aqua marine, 28278
Corliss Nurse, green, 123123121, 640 163 2354
以下是我到目前为止在Python3中编写的代码
import os
import string
import re
f = open("input.txt", "r")
for i in f:
if i and i[0].isalpha(): // proccess lines that starts with alphabet
a = str((i.split(", ")))
print(a)
现在,如何在JSON中按lastname、firstname和output排序
谢谢。您可以为内置函数
sorted()
编写自定义键
函数。解析是通过re
模块完成的
import re
from pprint import pprint
# the last and first name table:
# LastName, FirstName, (123)-123-1234, Blue, 11013
# FirstName LastName, Green, 12345, 123 123 1234
# FirstName, LastName, 12345, 123 123 1234, Yellow
data = """
Annalee Loftis, green, 74339, 360 105 7811
Quinton, Liptak, 87225, 194 974 1020, yellow
Demming, Kent, (753)-851-4445, blue, 81403
Humperdink, Englebert G., (232)-955-1267, aqua marine, 28278
Corliss Nurse, green, 123123121, 640 163 2354"""
g = re.findall(r'^(.*?), (.*?), (.*?), (.*?)$', data, flags=re.M)
def get_first_last(v):
if v[1].lower() == 'green':
first_name, last_name = v[0].split()
elif v[-1].lower() == 'yellow':
first_name, last_name = v[0], v[1]
else:
first_name, last_name = v[1], v[0]
return last_name, first_name
pprint(sorted(g, key=lambda v: get_first_last(v)))
这将打印:
[('Demming', 'Kent', '(753)-851-4445', 'blue, 81403'),
('Humperdink', 'Englebert G.', '(232)-955-1267', 'aqua marine, 28278'),
('Annalee Loftis', 'green', '74339', '360 105 7811'),
('Corliss Nurse', 'green', '123123121', '640 163 2354'),
('Quinton', 'Liptak', '87225', '194 974 1020, yellow')]
要将列表输出为Json,可以执行以下操作:
sorted_data = (sorted(g, key=lambda v: get_first_last(v)))
pprint(json.dumps(sorted_data, indent=4))
其中打印:
('[\n'
' [\n'
' "Demming",\n'
' "Kent",\n'
' "(753)-851-4445",\n'
' "blue, 81403"\n'
' ],\n'
' [\n'
' "Humperdink",\n'
' "Englebert G.",\n'
' "(232)-955-1267",\n'
' "aqua marine, 28278"\n'
' ],\n'
' [\n'
' "Annalee Loftis",\n'
' "green",\n'
' "74339",\n'
' "360 105 7811"\n'
' ],\n'
' [\n'
' "Corliss Nurse",\n'
' "green",\n'
' "123123121",\n'
' "640 163 2354"\n'
' ],\n'
' [\n'
' "Quinton",\n'
' "Liptak",\n'
' "87225",\n'
' "194 974 1020, yellow"\n'
' ]\n'
']')
您的代码甚至不能确定名称的不同部分在哪里。