我有一个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的?
L'idée générale est que
[['server', ''], ['port', '8800'], ['location', '/'], ['location', '/aa'], ['location', 'bb']]
ceci est traité comme une unité (la fonction est modifiée à partir du code que vous avez donné), de manière récursive dans la mesure où elle peut être traitée (car le nombre de couches ne peut pas être de 2)Code :
Résultat :
Je pense que le code inutile peut être supprimé. Puisque le problème cette fois est relativement simple (puisqu'il est déterminé que la couche inférieure est cette fois une liste de deux éléments), il n'est pas nécessaire de faire trop de jugement. et le traitement (même cette solution récursive peut également être modifiée en une méthode simple).
Je ne sais pas s'il y a d'autres éléments répétitifs dans vos informations en dehors de
location
. Je pense qu'il est préférable de les traiter uniformément, donc les valeurs de mon dictionnaire sont différentes des exemples que vous avez donnés. , utilisez la liste au lieu de la chaîne.Démontez-le pour avoir une meilleure apparence
D'autres vous ont déjà appris à pêcher, donc votre niveau ne s'améliorera pas si vous demandez simplement du poisson