2016-08-20 3 views
0

2つのJSONファイル - 出版社があり、書籍のリストを持つ出版社と書籍のリストを持っています。私はその本を対応する出版社とマッチさせる必要があります。 2つのファイルは次の形式である:2つのJSONファイルで一致するレコードを見つけるための最善のアプローチ

books.json(約400冊):

[{"bookId":"1173828", "bookName":"Dark Sky", "publisher":"ABC", "publisherCountry":"USA"}, ...] 

publishers.json(10周りの出版社)。

[{"publisherId":"128", "publisherName":"ABC", "publisherCountry":"USA"}, ...] 

出力の形式は次のようになります。

{"results": [{ "bookId": "1173828", "publisherId": 128}, ...]} 

私はファイルを解析するために、ジャクソンJSONを使用しています。私はこの問題にどのように最善のアプローチを用いるのかを知りたい。レコードごとに個別のオブジェクトを作成し、BookクラスとPublisherクラスのオブジェクトを比較して一致するものを探す必要がありますか?これは、あなたがデータ上で解決しなければならないだけ問題がある場合は

答えて

0

、最速のアプローチがにある:

  1. 解析すべての出版社、およびIDを保存する(またはその他の追加情報は、あなたが希望します出力を保持する)をハッシュマップに格納します。ここで、パブリッシャ名がキーです。名前と国の両方を一致させたい場合は、<publisherName>/<publisherCountry>のようなキーを使用できます。使用する区切り文字が自然にデータに現れない場合は、最も効果的です。たとえば、<publisherName>\n<publisherCountry>のように、これらの名前に改行があると仮定します。

  2. すべての書籍を解析し、データからキーを構築します。再び<publisher>\n<publisherCountry>とあなたのハッシュでそれを見てください。これで、必要なすべてのフィールドを出力できます。

0

あなたは、本質的に、内側がパブリッシャ名に基づいて書籍や出版社の間で参加をやっています。 連想配列(またはハッシュマップ)を使用して、パブリッシャとブックのインデックスを作成できます。これにより、各出版社や書籍に一意のキー(たとえば、出版社の名前)が関連付けられます。インデックスが作成されたら、キーを反復処理してデータを併合することで、do間の内部結合を実行できます。

import json 

with open('books.json') as f: 
    books = json.load(f) 

with open('publishers.json') as f: 
    publishers = json.load(f) 

books_index = { # 1 
    b['publisher']: { # 2 
     'bookId': b['bookId'], 
     'bookName': b['bookName'] 
    } 
    for b in books 
} 
publishers_index = { 
    p['publisherName']: { # 2 
     'publisherId': p['publisherId'], 
     'publisherName': p['publisherName'], 
     'publisherCountry': p['publisherCountry'] 
    } 
    for p in publishers 
} 

joined = [ 
    dict(books_index[k], **publishers_index[k]) # 3 
    for k in books_index.keys() 
] 

results = { 
    'results': joined 
} 

注:

ここでは、Pythonで実装例がある

  1. この構文は理解と呼ばれ、あなたは、単に単一の式でハッシュマップまたはリストを作成するためにそれを使用することができます。 Pythonのハッシュマップはdictsと呼ばれます。
  2. ここで、各書籍/サイト運営者の固有のキーとそれに関連する値を選択します。
  3. ここでは、本を出版社に関連付ける方法を選択しました。ここでは、本と出版社の辞書を1つにまとめています。
関連する問題