我有一个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的?
Idea umum ialah
[['server', ''], ['port', '8800'], ['location', '/'], ['location', '/aa'], ['location', 'bb']]
ini dianggap sebagai satu unit (fungsi diubah suai daripada kod yang anda berikan), secara rekursif sehingga tahap ia boleh diproses (kerana bilangan lapisan mungkin bukan 2)Kod:
Keputusan:
Saya rasa kod yang tidak perlu boleh dialih keluar Memandangkan masalah kali ini agak mudah (memandangkan lapisan bawah adalah senarai dua elemen kali ini), tidak perlu melakukan terlalu banyak pertimbangan. dan pemprosesan (malah rekursif ini Penyelesaian juga boleh ditukar kepada kaedah yang mudah).
Saya tidak pasti sama ada terdapat perkara berulang lain dalam maklumat anda selain
location
saya rasa lebih baik memprosesnya secara seragam, jadi nilai dalam kamus saya berbeza daripada contoh yang anda berikan . , gunakan senarai dan bukannya rentetan.Pisahkan untuk kelihatan lebih baik
Orang lain telah mengajar anda cara memancing, jadi tahap anda tidak akan meningkat jika anda hanya meminta ikan