
[code]

    jsonFile.json
    
    {
    "サイト1":["URL1","URL2","URL3"],
    "サイト2":["URL4","URL5","URL6"],
    "サイト3":["URL7","URL8","URL9"]
    }
    
[/code]

上記のような辞書のvalue部分が配列になっているJSONファイルがあります。

[code]

    import json
    
    f = open("jsonFile.json")
    data = json.load(f)
    datas = data
    
    values = datas.values()
    
    for valueList in values:
        for value in valueList:
                print('<li><a href=\"{0}\" target=\"_blank\"></a>/li>'.format(value))
    
    #<li><a href="URL1" target="_blank"></a>/li>
    #<li><a href="URL2" target="_blank"></a>/li>
    #<li><a href="URL3" target="_blank"></a>/li>
    #<li><a href="URL4" target="_blank"></a>/li>
    #<li><a href="URL5" target="_blank"></a>/li>
    #<li><a href="URL6" target="_blank"></a>/li>
    #<li><a href="URL7" target="_blank"></a>/li>
    #<li><a href="URL8" target="_blank"></a>/li>
    #<li><a href="URL9" target="_blank"></a>/li>
    
[/code]

理想

[code]

    #<li><a href="URL1" target="_blank">サイト1</a>/li>
    #<li><a href="URL4" target="_blank">サイト2</a>/li>
    #<li><a href="URL7" target="_blank">サイト3</a>/li>
    #<li><a href="URL2" target="_blank">サイト1</a>/li>
    #<li><a href="URL5" target="_blank">サイト2</a>/li>
    #<li><a href="URL8" target="_blank">サイト3</a>/li>
    #<li><a href="URL3" target="_blank">サイト1</a>/li>
    #<li><a href="URL6" target="_blank">サイト2</a>/li>
    #<li><a href="URL9" target="_blank">サイト3</a>/li>
    
[/code]

理想のように出力するforループ文を教えていただけませんか？


CC BY-SA 3.0
2017-06-11T07:10:12.447
35469
2017-06-11T08:14:56.963
2017-06-11T08:14:56.963
13199
23709
question
python python3
Python3のJSONでのDict内List操作について


次のコードはどうでしょうか。

[code]

    import json
    
    f = open("jsonFile.json")
    data = json.load(f)
    datas = data
    
    # "サイト"で始まるキーのみ取り出す
    site_keys = sorted(filter(lambda k: k.startswith('サイト'), datas))
    
    # ("サイトN","URLM")の形のリスト
    d = []
    for k in site_keys:
        row = []
        for v in datas[k]:
            row.append([v,k])
        d.append(row)
    
    # 回転
    d = list(zip(*d))
    
    for r in d:
        for v in r:
            print('<li><a href=\"{0}\" target=\"_blank\">{1}</a>/li>'.format(v[0],v[1]))
    
    # もしくは(最後の2重forの代替)
    # from functools import reduce
    # d = reduce(lambda accum,a: accum+a, d)
    # for v in d:
    #     print('<li><a href=\"{0}\" target=\"_blank\">{1}</a>/li>'.format(v[0],v[1]))
    
[/code]

"サイト"キーの形がもう少し複雑なら正規表現などを使うことになるかも知れません。


CC BY-SA 3.0
2017-06-11T07:57:30.750
35470
2017-06-11T07:57:30.750
13199
35469
answer