user3330284
user3330284

Reputation: 383

Format dictionary out python2

I have a webserver that give below sample data when you curl for logs.

curl http://10.10.10.10.server1.com/logs

Result

[{"Database":"Database2","Version":"0.1.2","Day_time":329477060,"My_count":102075020,"ProjectID":55358627,"Final_time":46716393},
{"Database":"Database200","Version":"0.1.0","Day_time":5167727780,"My_count":4724597678,"ProjectID":1708358878,"Final_time":3016238800},
{"Database":"Database1","Version":"1.1.1","Day_time":1647140700,"My_count":7833711472,"ProjectID":5241471510,"Final_time":2592239962},
{"Database":"Database201","Version":"0.2.2","Day_time":2490677104,"My_count":7525799955,"ProjectID":1849565089,"Final_time":5676234866},
{"Database":"Cache1","Version":"1.2.2","Day_time":6877694221,"My_count":7403116508,"ProjectID":3260475032,"Final_time":4142641476},
{"Database":"Database201","Version":"1.2.1","Day_time":8285487311,"My_count":2970023201,"ProjectID":2956709247,"Final_time":13313954},
{"Database":"Database202","Version":"0.0.1","Day_time":5032945971,"My_count":2453463265,"ProjectID":932154161,"Final_time":1521309104},
{"Database":"Database202","Version":"1.2.1","Day_time":6440876717,"My_count":609847918,"ProjectID":364440252,"Final_time":245407666},
{"Database":"Cache1","Version":"0.0.3","Day_time":2265003223,"My_count":7311023147,"ProjectID":4612143282,"Final_time":2698879865},
{"Database":"Database202","Version":"0.0.1","Day_time":8743007122,"My_count":7687687281,"ProjectID":4160318641,"Final_time":3527368640},
{"Database":"Cache1","Version":"1.1.2","Day_time":9281660375,"My_count":4028121672,"ProjectID":3240617982,"Final_time":787503690}]

I want to get Database, Version and Final_time from this log.

Below is my code.

from urllib2 import Request, urlopen, URLError
import json

# Read file, Execute REST api request then parse output

file = open("list_0f_servers.txt")
for host in hosts:
    link = 'http://%s.server1.com/logs' % (server)
    requestLink = Request(link)
    try:
        requestResponse = urlopen(requestLnk)
        resultJson = responseResponse.read()
        resultArray = []
        jsonData = json.loads(resultJson)
        for dict in jsonData:
            tempDict = {}
            for key, val in dict.iteritems():
                if key.find('Database') != -1 or key.find('Version') != -1 or key.find('Final_time') != -1:
                    tempDict[key] = val
            resultArray.append(tempDict)
            print tempDict
    except URLError, e:
        print 'Got an error code:', e
file.close()

I am able to manage to get below result.

{u'Database': u'Webapp1', u'Version': u'1.1.0', u'Final_time': 5729616276}
{u'Database': u'Cache0', u'Version': u'0.0.1', u'Final_time': 412280130}
{u'Database': u'Cache2', u'Version': u'0.1.1', u'Final_time': 967336228}
{u'Database': u'Cache0', u'Version': u'1.1.2', u'Final_time': 4443384438}
{u'Database': u'Database1', u'Version': u'0.2.2', u'Final_time': 782303822}
{u'Database': u'Cache0', u'Version': u'0.2.1', u'Final_time': 1490849761}
{u'Database': u'Webapp2', u'Version': u'1.1.2', u'Final_time': 4874374574}

but I want to format it to more human readable format, like below and write my out to a file. So it should display and write output to file.

Database Webapp1 Version 1.1.0 Final_time 5729616276
Database Cache0 Version 0.0.1 Final_time 412280130
Database Cache2 Version 0.1.1 Final_time 967336228
Database Cache0 Version 1.1.2 Final_time 4443384438
Database Database1 Version 0.2.2 Final_time 782303822
Database Cache0 Version 0.2.1 Final_time 1490849761
Database Webapp2 Version 1.1.2 Final_time 4874374574 

Any help is greatly appreciated. Thanks.

Upvotes: 0

Views: 40

Answers (3)

sciroccorics
sciroccorics

Reputation: 2427

If you want to extract fields from a dictionary in a specific order, it is better to list the keys you want instead of the keys you don't want (contrarily to the approach proposed by the two previous answers). So I suggest:

dicts = [{"Database":"Database2","Version":"0.1.2","Day_time":329477060,"My_count":102075020,"ProjectID":55358627,"Final_time":46716393}, "Database":"Database200","Version":"0.1.0","Day_time":5167727780,"My_count":4724597678,"ProjectID":1708358878,"Final_time":3016238800}, "Database":"Database1","Version":"1.1.1","Day_time":1647140700,"My_count":7833711472,"ProjectID":5241471510,"Final_time":2592239962},{"Database":"Database201","Version":"0.2.2","Day_time":2490677104,"My_count":7525799955,"ProjectID":1849565089,"Final_time":5676234866},{"Database":"Cache1","Version":"1.2.2","Day_time":6877694221,"My_count":7403116508,"ProjectID":3260475032,"Final_time":4142641476},{"Database":"Database201","Version":"1.2.1","Day_time":8285487311,"My_count":2970023201,"ProjectID":2956709247,"Final_time":13313954},{"Database":"Database202","Version":"0.0.1","Day_time":5032945971,"My_count":2453463265,"ProjectID":932154161,"Final_time":1521309104},{"Database":"Database202","Version":"1.2.1","Day_time":6440876717,"My_count":609847918,"ProjectID":364440252,"Final_time":245407666},{"Database":"Cache1","Version":"0.0.3","Day_time":2265003223,"My_count":7311023147,"ProjectID":4612143282,"Final_time":2698879865}, "Database":"Database202","Version":"0.0.1","Day_time":8743007122,"My_count":7687687281,"ProjectID":4160318641,"Final_time":3527368640}, "Database":"Cache1","Version":"1.1.2","Day_time":9281660375,"My_count":4028121672,"ProjectID":3240617982,"Final_time":787503690}]

keys = "Database Version Final_time".split()
result = '\n'.join(' / '.join(("%s %s" % (k,d[k]) for k in keys)) for d in dicts)
print(result)

Result:

Database Database2 / Version 0.1.2 / Final_time 46716393
Database Database200 / Version 0.1.0 / Final_time 3016238800
Database Database1 / Version 1.1.1 / Final_time 2592239962
Database Database201 / Version 0.2.2 / Final_time 5676234866
Database Cache1 / Version 1.2.2 / Final_time 4142641476
Database Database201 / Version 1.2.1 / Final_time 13313954
Database Database202 / Version 0.0.1 / Final_time 1521309104
Database Database202 / Version 1.2.1 / Final_time 245407666
Database Cache1 / Version 0.0.3 / Final_time 2698879865
Database Database202 / Version 0.0.1 / Final_time 3527368640
Database Cache1 / Version 1.1.2 / Final_time 787503690

Note: I added slashes / for better readability, but you may remove it in the join statement if you don't want/need them

Upvotes: 1

Daniel
Daniel

Reputation: 12056

You can do the following:

out = ['ProjectID', 'My_count', 'Date_time']
print(" ".join(["{} {}".format(k, v) for k, v in x.items() if k not in out]))

For Python 2:

print " ".join(["{} {}".format(k, v) for k, v in x.iteritems() if k not in out])

Upvotes: 1

Colin Ricardo
Colin Ricardo

Reputation: 17269

Would something like this work?

def prettify(d, exclude=['ProjectID', 'My_count', 'Date_time']):
    res = ''

    for k, v in d.items():
        if k in exclude:
            continue
        res += ' {} {}'.format(k, v)
    return res

Upvotes: 1

Related Questions