検索

ホームページ  >  に質問  >  本文

python - 遍历list,转换成dict

我有一个list如下

[[['server', ''],['port','8800'],['location','/'],['location','/aa'],['location','bb']],[['server', ''],['port','80'],['location','/'],['location','/aa'],['location','bb']]]

想要得到如下的dict


[{'server': '','port': '8800','location': '/,/aa,/bb'},{'server': '','port': '80','location': '/,/aa,/bb'}]

或者

[{'server': '','port': '8800','location': '/'},{'server': '','port': '8800','location': '/aa'},{'server': '','port': '8800','location': '/bb'},{'server': '','port': '80','location': '/'},{'server': '','port': '80','location': '/aa'},{'server': '','port': '80','location': '/bb'}]

求解

之前有sf上的同学给出了一个例子

def turn2dic(lst):
    global key, value
    dic = {}
    if all([not isinstance(item, list) for item in lst]):
        if len(lst) == 2:
          key, value = lst
        elif len(lst) == 1:
          key=lst[0]
          value=''
        elif len(lst) == 3:
          key=lst[0]
          value=lst[1]
        dic[key] = value
    else:
        for item in lst:
            subdic = turn2dic(item)
            print subdic
            dic.update(subdic)
            print dic
    return dic

但是这个上面代码里,location是覆盖的,因为dic.update(subdic),有什么办法是append的?

PHP中文网PHP中文网2814日前445

全員に返信(4)返信します

  • 巴扎黑

    巴扎黑2017-04-17 17:56:02

    リーリー


    一般的な考え方は、[['server', ''], ['port', '8800'], ['location', '/'], ['location', '/aa'], ['location', 'bb']] これは処理できる範囲で再帰的に (レイヤーの数が 2 ではない可能性があるため)

    ユニットとして扱われます (関数は指定されたコードから変更されます)。 🎜>

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 17:56:02

    コード:

    リーリー

    結果:

    リーリー
    1. 今回の問題は比較的単純なので(今回は最下層が2要素リストであると判断しているため)、あまり判断する必要はないと思います。と処理(この再帰的解法でも単純な方法に変更することも可能です)。

    2. location以外にも重複するものがあるかどうかはわかりませんが、統一的に処理したほうが良いと思いますので、私の辞書の値はあなたが挙げた例とは異なります。 . 、文字列の代わりにリストを使用します。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:56:02

    見た目を良くするために分解してみましょう

    リーリー

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 17:56:02

    釣りは他の人が教えてくれているので、ただ魚を求めるだけではレベルは上がりません

    返事
    0
  • キャンセル返事