2017-09-05 23 views
0

私はJSONを反復していると私は、このオブジェクトから、次のフィールドを抽出したい:PythonでJSONから特定のフィールドと値を抽出する方法は?

  1. ID、
  2. Open_date
  3. ユーザー
  4. Ticket_status
  5. END_DATE

私が持っているデータ構造は次のようなものです:

filtered_data = 
[{'id': 1021972, 'Aging_Deferred_Transferred': '', 'Aging_Open_Issue': '0.94', 
'Aging_Un_investigated_Issue': '0.94', 'User': 'John P.', 'ModifiedOn': '2017-09-04 21:29:59', 
'Open_date':'2017-08-04 01:34:18','End_date':'2017-09-05 00:29:01', 
'Ticket_status':'Transferred'},{'id': 1036722, 'Aging_Deferred_Transferred': '', 'Aging_Open_Issue': '0.12', 
'Aging_Un_investigated_Issue': '0.01', 'User': 'John P.', 'ModifiedOn': '2017-09-04 21:29:59', 
'Open_date':'2017-09-01 00:34:18','End_date':'', 
'Ticket_status':'Researching'},{'id': 1015621, 'Aging_Deferred_Transferred': '', 'Aging_Open_Issue': '0.99', 
'Aging_Un_investigated_Issue': '0.11', 'User': 'John D.', 'ModifiedOn': '2017-06-05 12:19:59', 
'Open_date':'2017-01-01 00:00:18','End_date':'2017-09-01 20:20:57', 
'Ticket_status':'Closed'}] 

私は、次のような辞書などのデータ構造(あなたが私の目標を達成するためのよりよいデータ構造があると思うならば、それを言及してください)戻りたい:

dict_user_john_p = {'ID':1021972,'Open_date':'2017-08-04 01:34:18','Ticket_status':'Transferred','End_date':'2017-09-05 00:29:01', 
'ID':1036722,'Open_date':'2017-09-01 00:34:18','Ticket_status':'Researching','End_date':''} 

dict_user_john_D = {'ID':1015621,...,'End_date':'1015621'} 

どのように抽出することができますが上記の特定のフィールドと別のデータ構造(辞書)としてそれらを返しますか?

+4

ヒント:あり"JSON"のようなものはありません。あなたのデータ構造は普通の辞書を含む普通のリストです。他のリストや辞書のデータにアクセスする場合と同じ方法でデータにアクセスできます。 – Kevin

+0

ですが、どのようにして辞書の各キーと値を取得し、それらを1つに整理できますか? –

+0

名前がユーザー名によって異なる個別の辞書がたくさんある場合は、Tigerhawkの回答(https://stackoverflow.com/a/38972761/953482)を参照してください。 TLDRは:「それをしないで、代わりにすべての値を辞書に保存する」 – Kevin

答えて

2

filtered_dataは通常のリストなので、通常の索引付けまたは反復を使用して個々の辞書にアクセスできます。あなたは、各要素を取得し、ユーザ名をキーと新しい辞書、にそれらを置くことができます。

filtered_data = [{'id': 1021972, 'Aging_Deferred_Transferred': '', 'Aging_Open_Issue': '0.94', 
'Aging_Un_investigated_Issue': '0.94', 'User': 'John P.', 'ModifiedOn': '2017-09-04 21:29:59', 
'Open_date':'2017-08-04 01:34:18','End_date':'2017-09-05 00:29:01', 
'Ticket_status':'Transferred'},{'id': 1036722, 'Aging_Deferred_Transferred': '', 'Aging_Open_Issue': '0.12', 
'Aging_Un_investigated_Issue': '0.01', 'User': 'John P.', 'ModifiedOn': '2017-09-04 21:29:59', 
'Open_date':'2017-09-01 00:34:18','End_date':'', 
'Ticket_status':'Researching'},{'id': 1015621, 'Aging_Deferred_Transferred': '', 'Aging_Open_Issue': '0.99', 
'Aging_Un_investigated_Issue': '0.11', 'User': 'John D.', 'ModifiedOn': '2017-06-05 12:19:59', 
'Open_date':'2017-01-01 00:00:18','End_date':'2017-09-01 20:20:57', 
'Ticket_status':'Closed'}] 

data_by_user = {} 
for d in filtered_data: 
    data_by_user[d["User"]] = d 

print(data_by_user["John P."]) 

は今、あなたは自分の名前で新しい辞書をインデックスによってジョン・Pのデータ(または他人のデータ)にアクセスすることができます。


編集:あなたは、キー/値のペアを明示的にのみ、指定したキーから選択する新しいdictsを構築することにより、新しい辞書になりますどの程度に選択することができます:

data_by_user = {} 
for d in filtered_data: 
    data_by_user[d["User"]] = {k:d[k] for k in ("id", "Open_date", "User", "Ticket_status", "End_date")} 
+0

1つの観察:私はJohn P.のすべてのデータを持っていますが、すべてのキーと値があります。 ID、open_date、user、ticket_status、end_dateのキーと値のみを取得することはできませんか? –

+1

これを行うにはいくつかの方法がありますが、最も単純なのは、必要なキーを繰り返して、それらを追加するだけです。編集されました。 – Kevin

関連する問題