在元组列表中保存所有OUTGOING事件的日期和时间值



传出事件是指'from' = 4的值有人能帮我写代码吗?我卡住了。

eg:
({'date': '20090328',
'time': '061546',
'from': '4',
'to': '12',
'cell_tower': '220',
'event_type': 'MOC'},
{'date': '20090328',
'time': '053359',
'from': '4',
'to': '2',
'cell_tower': '221',
'event_type': 'SOM'},
)
json文件:
{'user': '4', 'data': [{'date': '20090328', 'time': '061546', 'from': '4', 'to': '12', 'cell_tower': '220', 'event_type': 'MOC'}, {'date': '20090328', 'time': '053359', 'from': '4', 'to': '2', 'cell_tower': '221', 'event_type': 'SOM'}, {'date': '20090328', 'time': '012339', 'from': '6', 'to': '4', 'cell_tower': '14054', 'event_type': 'MOC'}

见下(一行)

data = {
'user': '4',
'data': [
{
'date': '20090328',
'time': '061546',
'from': '4',
'to': '12',
'cell_tower': '220',
'event_type': 'MOC'
},
{
'date': '20090328',
'time': '053359',
'from': '4',
'to': '2',
'cell_tower': '221',
'event_type': 'SOM'
},
{
'date': '20090328',
'time': '012339',
'from': '6',
'to': '4',
'cell_tower': '14054',
'event_type': 'MOC'
}
]
}
tuples = [(e['date'], e['time']) for e in data['data'] if e['from'] == '4']
print(tuples)

输出
[('20090328', '061546'), ('20090328', '053359')]

使用这个名为filename.json:

的json文件
{
"user": "4",
"data": [
{
"date": "20090328",
"time": "061546",
"from": "4",
"to": "12",
"cell_tower": "220",
"event_type": "MOC"
},
{
"date": "20090328",
"time": "053359",
"from": "4",
"to": "2",
"cell_tower": "221",
"event_type": "SOM"
},
{
"date": "20090328",
"time": "012339",
"from": "6",
"to": "4",
"cell_tower": "14054",
"event_type": "MOC"
}
]
}

python代码看起来像这样:

import json
outgoing = '4'
tuples = []
file = open('filename.json')
events = json.load(file)['data']
for event in events:
if event['from'] == outgoing:
tuples.append((event['date'], event['time']))
file.close()

问题是您的输入数据不是有效的json格式,因为json需要双引号围绕其值。

您需要首先读取数据并将所有'替换为",然后使用json格式化为json对象,然后使用列表推导得到结果。

import json
with open('inp.json', 'r') as f:
inp = f.read()                             # load data from file
inp = inp.replace("'", """)               # replace ' with "
inp = json.loads(inp)                      # create a json object
output = [(data['date'], data['time']) for data in inp['data'] if data['from'] == '4']
for out in output:
print(out)

输出:

('20090328', '061546')
('20090328', '053359')

最新更新