pythonpython-3.xerpnext

Return line of largest field in list of dictionaries text file with Python?


I'm writing a Python script. I need to return line that contain largest 'uid' field from a text file. For example, in the below text file example:

{
    "uid": 683,
    "user_id": "2",
    "timestamp": datetime.datetime(2020, 5, 17, 16, 39, 54),
    "status": 1,
    "punch": 0,
}, {
    "uid": 684,
    "user_id": "4",
    "timestamp": datetime.datetime(2020, 5, 17, 16, 41, 20),
    "status": 1,
    "punch": 0,
}

Return Text File ex:

{
    "uid": 684,
    "user_id": "4",
    "timestamp": datetime.datetime(2020, 5, 17, 16, 41, 20),
    "status": 1,
    "punch": 0,
}

Solution

  • Here is my solution, instead of reading a text file I used a text from string variable text.

    Final result (entry with maximal uid) is contained inside max_entry variable. This result I write as string into text file result.txt.

    Try it online!

    import datetime
    
    text = """
    {
        "uid": 683,
        "user_id": "2",
        "timestamp": datetime.datetime(2020, 5, 17, 16, 39, 54),
        "status": 1,
        "punch": 0,
    }, {
        "uid": 684,
        "user_id": "4",
        "timestamp": datetime.datetime(2020, 5, 17, 16, 41, 20),
        "status": 1,
        "punch": 0,
    }
    """
    
    data = eval('[' + text + ']')
    max_entry = max(data, key = lambda e: e['uid'])
    print(max_entry)
    
    with open('result.txt', 'w', encoding = 'utf-8') as f:
        f.write(str(max_entry))
    

    Output:

    {'uid': 684, 'user_id': '4', 'timestamp': datetime.datetime(2020, 5, 17, 16, 41, 20), 'status': 1, 'punch': 0}