我有一个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的?
大致思路就是
[['server', ''], ['port', '8800'], ['location', '/'], ['location', '/aa'], ['location', 'bb']]
这种的视为一个单元处理(函数修改自你给的代码),递归到可以处理程度(因为层数可能不为2)代碼:
結果:
我覺得不必要的代碼可以拿掉,這次的問題既然比較單純(既然這次都確定底層是雙元素的 list),那就不用做太多判斷和處理(甚至這個 recursive 的解法也可以改成簡單的做法)。
我不確定你的資料裡面,除了
location
以外還有沒有別的會重複的東西,我覺得統一處理比較好,所以我字典的值跟你給出的範例不太一樣,用 list 而不是 string。分拆开来好看些
别人已经授你渔了,一味的要鱼水平不会有提高的