찾다

 >  Q&A  >  본문

python - 遍历list,转换成dict

我有一个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的?

PHP中文网PHP中文网2817일 전448

모든 응답(4)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-17 17:56:02

    으아악


    일반적인 생각은 [['server', ''], ['port', '8800'], ['location', '/'], ['location', '/aa'], ['location', 'bb']] 이것을 하나의 단위(제공한 코드에서 함수가 수정됨)로 처리할 수 있는 정도까지 재귀적으로 처리한다는 것입니다(레이어 수가 2가 아닐 수 있으므로)

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 17:56:02

    코드:

    으아악

    결과:

    으아악
    1. 이번 문제는 비교적 간단하기 때문에(이번에는 맨 아래 레이어가 2요소 리스트라고 판단되므로) 불필요한 코드는 제거할 수 있다고 생각합니다. 및 처리(이 재귀적 솔루션도 간단한 방법으로 변경될 수 있음).

    2. 귀하의 정보에 location 외에 반복되는 내용이 있는지는 잘 모르겠습니다. 획일적으로 처리하는 것이 좋을 것 같아서 제 사전에 있는 값이 말씀하신 예와 다릅니다. . , 문자열 대신 목록을 사용하세요.

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:56:02

    분해해서 보면 더 예뻐요

    으아악

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 17:56:02

    다른 사람들이 이미 낚시하는 법을 가르쳐 주었기 때문에 단순히 물고기만 달라고 하면 레벨이 오르지 않습니다

    회신하다
    0
  • 취소회신하다