我有一个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的?
巴扎黑2017-04-17 17:56:02
リーリー
一般的な考え方は、[['server', ''], ['port', '8800'], ['location', '/'], ['location', '/aa'], ['location', 'bb']]
これは処理できる範囲で再帰的に (レイヤーの数が 2 ではない可能性があるため)
PHP中文网2017-04-17 17:56:02
コード:
リーリー結果:
リーリー今回の問題は比較的単純なので(今回は最下層が2要素リストであると判断しているため)、あまり判断する必要はないと思います。と処理(この再帰的解法でも単純な方法に変更することも可能です)。
location
以外にも重複するものがあるかどうかはわかりませんが、統一的に処理したほうが良いと思いますので、私の辞書の値はあなたが挙げた例とは異なります。 . 、文字列の代わりにリストを使用します。