Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python对联系人列表排序并将输出存储在JSON中_Python_Python 3.x_Sorting_Data Structures - Fatal编程技术网

使用python对联系人列表排序并将输出存储在JSON中

使用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,

我有一个联系人列表文件“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, 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'
 ']')

您的代码甚至不能确定名称的不同部分在哪里。