2016-04-23 4 views
0

Я имею в Python этот словарь:Python кортеж структуры JSon

[('157.55.39.64', 4), ('188.165.15.192', 2), ('1.165.15.192', 1)] 

, где первое поле является IP-адрес, а другой представляет, сколько раз присутствует в файле.

Я хотел бы иметь JSon представление о нем, как этот:

[{"ip":"157.55.39.64","times":4}, 
    {"ip":"188.165.15.192","times":2}, 
    {"ip":"1.165.15.192","times":1}] 

Я попытался с помощью jsonify (словарь), но я получаю это:

{"157.55.39.64":4, "188.165.15.192": 2, "1.165.15.192":1} 

который только один JSON пункт. Я не знаю, как поместить строки «ip» и «times», чтобы появиться в json-файле.

Любая помощь?

+0

Ваша первоначальная структура представляет собой список кортежей. Не словарь. – idjaw

ответ

3

Если исходная структура называется ips, вы можете получить JSON вам нужно с

ips = [('157.55.39.64', 4), ('188.165.15.192', 2), ('1.165.15.192', 1)] 
json.dumps([{"ip": ip[0], "times": ip[1]} for ip in ips]) 

выход будет

[ 
    { 
     "ip": "157.55.39.64", 
     "times": 4 
    }, 
    { 
     "ip": "188.165.15.192", 
     "times": 2 
    }, 
    { 
     "ip": "1.165.15.192", 
     "times": 1 
    } 
] 
0

Используйте представление списка, чтобы преобразовать данные в требуемый формат и попробовать jsonify.

data = [('157.55.39.64', 4), ('188.165.15.192', 2), ('1.165.15.192', 1)] 
data = [{"ip": ip, "times": times} for ip, times in data] 

Теперь используйте jsonify преобразовать этот список в json.

Смежные вопросы