python 多层list 转dict问题
大家讲道理
大家讲道理 2017-04-17 17:54:24
0
4
453

我有一个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', '/']

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(4)
洪涛

저는 귀하가 제공한 예를 테스트하고 그것이 귀하가 원하는 것인지 확인하기 위해 하나를 작성했습니다.

으아악 으아악
阿神

이렇게 하면 됩니다

으아악

결과

으아악
小葫芦

어떤 상황에서 이런 비인도적인 목록이 만들어지나요?

左手右手慢动作

이런 아이디어가 있나요?
먼저 목록을 문자열로 변환합니다.
그런 다음 while 루프를 실행하고 대괄호를 바꾸기 위해 바꾸기 함수를 사용합니다.
예를 들어 '[[['는 '3'으로 대체, ']]'는 '-2'로 대체
그런 다음 대체된 숫자를 cumsum
1이 나오면 잘라서 결과를 얻을 수 있습니다
그렇지 않다면 시도해 보세요. 작동하지 않습니다. 코드를 작성하세요

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿