検索

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

python 多层list 转dict问题

我有一个list如下

list=[[['upstream', 'aa'], [['server', '172.16.1.6']]], [['upstream', 'bb'], [['server', '172.16.1.6:8080']]], [['server'], [['listen', '80'], ['server_name', 'aaa.test.com']]]]

类似上面的,可能还有更多层嵌套

请问这样的list,我怎么转换成dict

最好是类似

{'upstream:aa','server:172.16.1.6'}

这种

请注意,list里[]是分块的,这个分块对解析有意义,所以不能完全使用flatten()之类的压平。否则解析的时候就乱了。

目前 松林给出的代码,运算出来的答案是我想要的,不过实际上我的列表嵌套层数还更多一些。

不知道怎么解决。。

============================

更新问题

首先感谢各位的答案

其次,楼下第一的答案
如果这个list里有key是一样的,但是value可能有两个以上,比如

[[['location', '/']
.........
[['location', '~', '.*\.(ico|gif|jpg|jpeg|png|bmp|swf)$']]]]

在一个大的[]里,出现两次location,并且第二次的location有2个以上的value

[['location', '/']被后面的覆盖,而后面的因为有2个value,导致不满足key, value = lst if len(lst)==2 else (lst[0], ''),于是匹配不到[['location', '/']

大家讲道理大家讲道理2893日前460

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

  • PHP中文网

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

    私はあなたが私に与えた例をテストするために、それがあなたが望むものであるかどうかを確認するために一つ書きました:

    リーリー リーリー

    返事
    0
  • 阿神

    阿神2017-04-17 17:56:24

    これならできます

    リーリー

    結果

    リーリー

    返事
    0
  • 高洛峰

    高洛峰2017-04-17 17:56:24

    どのような状況でこのような非人道的なリストが作成されるのでしょうか?

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 17:56:24

    このようなアイデアはありますか?
    まずリストを文字列に変換します
    次に while ループを実行し、replace 関数を使用して角括弧を置き換えます
    たとえば、「[[[」は'3' に置き換えられ、']]' は '-2' に置き換えられます
    次に、置き換えられた数値を合計します
    1 になったら、それを切り取ると結果が得られます
    そうでない場合は、試してみてください動作しない場合は、コードを書いてください

    返事
    0
  • キャンセル返事