ローマ字-カナ対応辞書の作成【python】

#概要
自作のローマ字カナ読み関数作るために、ローマ字とカナ１モウラの対応（例："kya"="キャ"）を定義した辞書を作りました。
一部、筆者仕様の定義になっているため、ご注意ください。

GitHub:
https://github.com/JiroShimaya/RomajiDict/

#コード
直接手で書いてもよいのですが、拗音の処理など、繰り返し処理で書ける部分が多そうだったので、Pythonでobjectを生成したあと、jsonとして出力しました。

```generator.py
import json

def generate():
  obj = {}
  kana = {
    "k":"カキクケコ",
    "ky":["キ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "kw":["ク"+v for v in "ヮ/ィ/ゥ/ェ/ォ".split("/")],
    "s":"サシスセソ",
    "sy":["シ"+v for v in "ャ//ュ/ェ/ョ".split("/")],
    "sh":["シ"+v for v in "ャ//ュ/ェ/ョ".split("/")],
    "sw":["ス"+v for v in "ヮ/ィ/ゥ/ェ/ォ".split("/")],
    "t":"タチツテト",
    "ty":["チ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "th":["テ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "ts":["ツ"+v for v in "ァ/ィ//ェ/ォ".split("/")],
    "c":"カシクセコ",
    "ch":["チ"+v for v in "ャ//ュ/ェ/ョ".split("/")],
    "cy":["チ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "q":["ク"+v for v in "ァ/ィ//ェ/ォ".split("/")],
    "n":"ナニヌネノ",
    "ny":["ニ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "nw":["ヌ"+v for v in "ヮ/ィ/ゥ/ェ/ォ".split("/")],
    "h":"ハヒフヘホ",
    "hy":["ヒ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "f":["フ"+v for v in "ァ/ィ//ェ/ォ".split("/")],
    "fy":["フ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "m":"マミムメモ",
    "my":["ミ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "y":"ヤ/イ/ユ/イェ/ヨ".split("/"),
    "r":"ラリルレロ",
    "ry":["リ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "w":"ワ/ウィ/ウ/ウェ/ウォ".split("/"), #ウォはヲでも可
    "g":"ガギグゲゴ",
    "gy":["ギ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "z":"ザジズゼゾ",
    "zy":["ジ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "j":["ジ"+v for v in "ャ//ュ/ェ/ョ".split("/")],
    "jy":["ジ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "d":"ダヂヅデド",
    "dh":["デ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "dy":["ヂ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "b":"バビブベボ",
    "by":["ビ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "v":"ヴァ/ヴィ/ヴ/ヴェ/ヴォ".split("/"),
    "vy":["ヴ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "p":"パピプペポ",
    "py":["ピ"+v for v in "ャ/ィ/ュ/ェ/ョ".split("/")],
    "x":"ァィゥェォ",
    "xy":"ャィュェョ",
    "l":"ァィゥェォ",
    "ly":"ャィュェョ",
    }
  obj.update({r:k for r,k in zip("aiueo","アイウエオ")})
  for c, col in kana.items():
    obj.update({c+v:k for v, k in zip("aiueo",col)})
  
  obj.update({k+"tu":"ッ" for k in "lx"})
  obj.update({k+"tsu":"ッ" for k in "lx"})
  
  return obj

if __name__=="__main__":
  PATH = "./ramaji_dict.json"
  obj = generate()
  with open(PATH,"w") as f:
    json.dump(obj, f, ensure_ascii=False,indent=2)
```

#出力ファイル

```romaji_dict.json
{
  "a": "ア",
  "i": "イ",
  "u": "ウ",
  "e": "エ",
  "o": "オ",
  "ka": "カ",
  "ki": "キ",
  "ku": "ク",
  "ke": "ケ",
  "ko": "コ",
  "kya": "キャ",
  "kyi": "キィ",
  "kyu": "キュ",
  "kye": "キェ",
  "kyo": "キョ",
  "kwa": "クヮ",
  "kwi": "クィ",
  "kwu": "クゥ",
  "kwe": "クェ",
  "kwo": "クォ",
  "sa": "サ",
  "si": "シ",
  "su": "ス",
  "se": "セ",
  "so": "ソ",
  "sya": "シャ",
  "syi": "シ",
  "syu": "シュ",
  "sye": "シェ",
  "syo": "ショ",
  "sha": "シャ",
  "shi": "シ",
  "shu": "シュ",
  "she": "シェ",
  "sho": "ショ",
  "swa": "スヮ",
  "swi": "スィ",
  "swu": "スゥ",
  "swe": "スェ",
  "swo": "スォ",
  "ta": "タ",
  "ti": "チ",
  "tu": "ツ",
  "te": "テ",
  "to": "ト",
  "tya": "チャ",
  "tyi": "チィ",
  "tyu": "チュ",
  "tye": "チェ",
  "tyo": "チョ",
  "tha": "テャ",
  "thi": "ティ",
  "thu": "テュ",
  "the": "テェ",
  "tho": "テョ",
  "tsa": "ツァ",
  "tsi": "ツィ",
  "tsu": "ツ",
  "tse": "ツェ",
  "tso": "ツォ",
  "ca": "カ",
  "ci": "シ",
  "cu": "ク",
  "ce": "セ",
  "co": "コ",
  "cha": "チャ",
  "chi": "チ",
  "chu": "チュ",
  "che": "チェ",
  "cho": "チョ",
  "cya": "チャ",
  "cyi": "チィ",
  "cyu": "チュ",
  "cye": "チェ",
  "cyo": "チョ",
  "qa": "クァ",
  "qi": "クィ",
  "qu": "ク",
  "qe": "クェ",
  "qo": "クォ",
  "na": "ナ",
  "ni": "ニ",
  "nu": "ヌ",
  "ne": "ネ",
  "no": "ノ",
  "nya": "ニャ",
  "nyi": "ニィ",
  "nyu": "ニュ",
  "nye": "ニェ",
  "nyo": "ニョ",
  "nwa": "ヌヮ",
  "nwi": "ヌィ",
  "nwu": "ヌゥ",
  "nwe": "ヌェ",
  "nwo": "ヌォ",
  "ha": "ハ",
  "hi": "ヒ",
  "hu": "フ",
  "he": "ヘ",
  "ho": "ホ",
  "hya": "ヒャ",
  "hyi": "ヒィ",
  "hyu": "ヒュ",
  "hye": "ヒェ",
  "hyo": "ヒョ",
  "fa": "ファ",
  "fi": "フィ",
  "fu": "フ",
  "fe": "フェ",
  "fo": "フォ",
  "fya": "フャ",
  "fyi": "フィ",
  "fyu": "フュ",
  "fye": "フェ",
  "fyo": "フョ",
  "ma": "マ",
  "mi": "ミ",
  "mu": "ム",
  "me": "メ",
  "mo": "モ",
  "mya": "ミャ",
  "myi": "ミィ",
  "myu": "ミュ",
  "mye": "ミェ",
  "myo": "ミョ",
  "ya": "ヤ",
  "yi": "イ",
  "yu": "ユ",
  "ye": "イェ",
  "yo": "ヨ",
  "ra": "ラ",
  "ri": "リ",
  "ru": "ル",
  "re": "レ",
  "ro": "ロ",
  "rya": "リャ",
  "ryi": "リィ",
  "ryu": "リュ",
  "rye": "リェ",
  "ryo": "リョ",
  "wa": "ワ",
  "wi": "ウィ",
  "wu": "ウ",
  "we": "ウェ",
  "wo": "ウォ",
  "ga": "ガ",
  "gi": "ギ",
  "gu": "グ",
  "ge": "ゲ",
  "go": "ゴ",
  "gya": "ギャ",
  "gyi": "ギィ",
  "gyu": "ギュ",
  "gye": "ギェ",
  "gyo": "ギョ",
  "za": "ザ",
  "zi": "ジ",
  "zu": "ズ",
  "ze": "ゼ",
  "zo": "ゾ",
  "zya": "ジャ",
  "zyi": "ジィ",
  "zyu": "ジュ",
  "zye": "ジェ",
  "zyo": "ジョ",
  "ja": "ジャ",
  "ji": "ジ",
  "ju": "ジュ",
  "je": "ジェ",
  "jo": "ジョ",
  "jya": "ジャ",
  "jyi": "ジィ",
  "jyu": "ジュ",
  "jye": "ジェ",
  "jyo": "ジョ",
  "da": "ダ",
  "di": "ヂ",
  "du": "ヅ",
  "de": "デ",
  "do": "ド",
  "dha": "デャ",
  "dhi": "ディ",
  "dhu": "デュ",
  "dhe": "デェ",
  "dho": "デョ",
  "dya": "ヂャ",
  "dyi": "ヂィ",
  "dyu": "ヂュ",
  "dye": "ヂェ",
  "dyo": "ヂョ",
  "ba": "バ",
  "bi": "ビ",
  "bu": "ブ",
  "be": "ベ",
  "bo": "ボ",
  "bya": "ビャ",
  "byi": "ビィ",
  "byu": "ビュ",
  "bye": "ビェ",
  "byo": "ビョ",
  "va": "ヴァ",
  "vi": "ヴィ",
  "vu": "ヴ",
  "ve": "ヴェ",
  "vo": "ヴォ",
  "vya": "ヴャ",
  "vyi": "ヴィ",
  "vyu": "ヴュ",
  "vye": "ヴェ",
  "vyo": "ヴョ",
  "pa": "パ",
  "pi": "ピ",
  "pu": "プ",
  "pe": "ペ",
  "po": "ポ",
  "pya": "ピャ",
  "pyi": "ピィ",
  "pyu": "ピュ",
  "pye": "ピェ",
  "pyo": "ピョ",
  "xa": "ァ",
  "xi": "ィ",
  "xu": "ゥ",
  "xe": "ェ",
  "xo": "ォ",
  "xya": "ャ",
  "xyi": "ィ",
  "xyu": "ュ",
  "xye": "ェ",
  "xyo": "ョ",
  "la": "ァ",
  "li": "ィ",
  "lu": "ゥ",
  "le": "ェ",
  "lo": "ォ",
  "lya": "ャ",
  "lyi": "ィ",
  "lyu": "ュ",
  "lye": "ェ",
  "lyo": "ョ",
  "ltu": "ッ",
  "xtu": "ッ",
  "ltsu": "ッ",
  "xtsu": "ッ"
}
```