>source

사전에서 목록으로 값을 재조합하고 싶습니다.

res = []
dst = {
    'a': [1, 2, 3],
    'b': [4, 5]
}
# Something will be done #
res = [
    {'a': 1, 'b': 4}, {'a': 1, 'b': 5},
    {'a': 2, 'b': 4}, {'a': 2, 'b': 5},
    {'a': 3, 'b': 4}, {'a': 3, 'b': 5}
]

어떻게 할 수 있습니까?

  • 답변 # 1

    나는 당신도 배울 수 있도록 전통과 비단뱀의 두 가지 방법을 보여줄 것입니다

    암호:

    dst = {
        'a': [1, 2, 3],
        'b': [4, 5]
    }
    #Traditional way
    res = []
    for a_val in dst['a']:
        for b_val in dst['b']:
            d = dict()
            d['a']  = a_val
            d['b'] = b_val
            res.append(d)
    print(res)
     
    # Pythonic way 
    py_res = [{'a': a_val, 'b': b_val} for b_val in dst['b'] for a_val in dst['a'] ]    
    print(py_res)
    
    

    산출:

    [{'a': 1, 'b': 4}, {'a': 1, 'b': 5}, {'a': 2, 'b': 4}, {'a': 2, 'b': 5}, {'a': 3, 'b': 4}, {'a': 3, 'b': 5}]
    [{'a': 1, 'b': 4}, {'a': 2, 'b': 4}, {'a': 3, 'b': 4}, {'a': 1, 'b': 5}, {'a': 2, 'b': 5}, {'a': 3, 'b': 5}]
    
    

  • 답변 # 2

    이것은 매우 간단한 중첩 반복 집합입니다.

    res = []
    dst = {
        'a': [1, 2, 3],
        'b': [4, 5]
    }
    for avals in dst['a']:
        for bvals in dst['b']:
            res.append({'a': avals, 'b': bvals})
    print(res)
    
    

    결과:

    [{'a': 1, 'b': 4}, {'a': 1, 'b': 5}, {'a': 2, 'b': 4},
     {'a': 2, 'b': 5}, {'a': 3, 'b': 4}, {'a': 3, 'b': 5}]
    
    

    해당 사전의 키 수에 관계없이 유사한 형식의 사전을 처리하기 위해 이것을 일반화하는 데 훨씬 더 많은 코드가 필요하지 않습니다. 나는 재귀가 아마도 일반적인 경우를 가장 잘 수행하는 방법이라고 생각합니다.

  • 이전 node.js - Nodejs 클러스터 성능 향상?
  • 다음 javascript - SocketIO 및 nodejs를 사용하면 내가 보낸 메시지 만 채팅방에 표시되지 않습니다