

以前[こちら](https://ja.stackoverflow.com/questions/35469/python3%E3%81%AEjson%E3%81%A7%E3%81%AEdict%E5%86%85list%E6%93%8D%E4%BD%9C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)で質問させて頂いた者です。再度解決策を教えていただけたらと思い投稿しました。よろしくお願い致します。

[code]

    jsonFile.json
    
    {
    "サイト名1":["URL11","URL12","URL13",..."URL1n"],
    "サイト名2":["URL21","URL22","URL23",..."URL2n"],
    "サイト名3":["URL31","URL32","URL33",..."URL3n"],
    ...
    "サイト名n":["URLn1","URLn2","URLn3",..."URLnn"]
    }
    
[/code]

key部分のサイト名は複数個あり、URLはそれぞれ異なるURLが入力されています。

[code]

    import json
    
    f = open("anidora.json")
    datas = json.load(f)
    
    keys = datas.keys()
    values = datas.values()
    
    d = []
    for k in 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]))
    
    #<li><a href="URL11" target="_blank">サイト1</a>/li>
    #<li><a href="URL21" target="_blank">サイト2</a>/li>
    #<li><a href="URL31" target="_blank">サイト3</a>/li>
    #<li><a href="URL12" target="_blank">サイト1</a>/li>
    #<li><a href="URL22" target="_blank">サイト2</a>/li>
    #<li><a href="URL32" target="_blank">サイト3</a>/li>
    #<li><a href="URL13" target="_blank">サイト1</a>/li>
    #<li><a href="URL23" target="_blank">サイト2</a>/li>
    #<li><a href="URL33" target="_blank">サイト3</a>/li>
    
[/code]

この結果は満足だったのですが、valueの配列数が多い場合途中までしか出力されませんでした。  
具体例：key:サイト名18、value:URL数48の場合、URL23つ目まで  
key:サイト名18、value:URL数28の場合、URL8つ目までしか表示されませんでした。

[code]

        d.append(row)
    
    d = list(zip(*d))
    
[/code]

この間で配列の個数に変動があるみたいなのですが原因がわかりません。  
サイト数、URL個数が増えてもすべて出力されるようにする方法を教えてください。  
再度の質問になり恐縮ではありますが、ご教示いただけたら幸いです。


CC BY-SA 3.0
2017-06-12T20:38:16.190
35518
2018-10-10T08:00:11.473
2017-06-12T20:43:54.013
23709
23709
question
python json python3
Python3のJSONでのDict内List操作について_2


こんな感じでいかがでしょうか。

[code]

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    import json
    
    with open("jsonFile.json") as f:
        data = json.load(f)
    
    sites = sorted(data)
    while any(data.values()):
        for site in sites:
            if not data[site]:
                continue
            url = data[site].pop(0)
            print("""<li><a href="{}" target="_blank">{}</a></li>""".format(site, url))
    
[/code]


CC BY-SA 3.0
2017-06-20T22:20:41.663
35762
2017-06-20T23:10:50.553
2017-06-20T23:10:50.553
7837
7837
35518
answer