파이썬 for문 배열안에 다른 배열 값 넣기.

조회수 2862회

aa.py

records1 = [(a,1),(b,2),(c,3)]
records2 = [(a1,4)]

# records1의 개수만큼 각 배열 값 에 records2 값을 넣음.
i = 0
while i < len(records1):
    records1[i].append(records2)
    i = i + 1

에러:AttributeError: 'tuple' object has no attribute 'append

records1의 각 배열 값 에 records2 값을 넣으려고 하는데, append 타입이 안된다고 하는거 같아요. 다른 방법으로 찾아봤는데 잘 안됬습니다.ㅠ

최종 적으로 dict로 json 형태로 만드려고 하는데, 조언 해주시면 감사하겠습니다.

최종 결과.

records1=[(a,1,(a1,4)),(b,2,(a1,4)),(c,3,(a1,4))]
jsonify(dict(records1))
{
    {
       "a":1,
            {
              "a1":4
            }
    },
    {
        "b":2,
             {
                "a1":4
             }
    },
    {
        "c":3,
             {
                "a1":4
             }
    }
}


제가 질문을 잘 못했던거 같아 추가 했어요.

records1 = [(("a",1),("b",2),("c",3),("a1",4)),(("a",1),("b",2),("c",3),("a1",4))]
records2 = [(("bb",2),("cc",3),("aa1",4))]
records3 = [(("aa",1),("bb",2),("cc",3),("aa1",4))]

이런 구조가 될거 같아요.

aa=[dict(record) for record in records1]
print(aa)
[{'a': 1, 'a1': 4, 'c': 3, 'b': 2,  **이곳에 records2 삽입**, **이곳에 records3 삽입**}, {'a': 1, 'a1': 4, 'c': 3, 'b': 2,  }]
aa = [{'a': 1, 'b': 2, 'c': 3, 'a1': 4,
           "records2":[{'cc': 3, 'aa1': 4, 'bb': 2}], "records3":[{'aa': 1, 'cc': 3, 'aa1': 4, 'bb': 2}] }]
--------------------------------------------------------

[
    {
        "a": 1,
        "a1": 4,
        "b": 2,
        "c": 3,
        "records2": [
            {
                "aa1": 4,
                "bb": 2,
                "cc": 3
            }
        ],
        "records3": [
            {
                "aa": 1,
                "aa1": 4,
                "bb": 2,
                "cc": 3
            }
        ]
    },
    .......

]

계속 코딩 해보고 있는 중이라서.. 일단 올려봤어요..

awe=[r + (records2,) for r in records1]
dict(record) for record in awe

[{'a': 1, 'a1': 4, 'c': 3, 'b': 2, (('bb', 1), ('bb', 2), ('cc', 3), ('aa1', 4)): (('aa', 1), ('bb', 2), ('cc', 3), ('aa1', 4))}, {'a': 1, 'a1': 4, 'c': 3, 'b': 2, (('bb', 1), ('bb', 2), ('cc', 3), ('aa1', 4)): (('aa', 1), ('bb', 2), ('cc', 3), ('aa1', 4))}]
  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • In [1]: [r + (records2[0],) for r in records1]
    Out[1]: [('a', 1, ('a1', 4)), ('b', 2, ('a1', 4)), ('c', 3, ('a1', 4))]
    
    In [2]: [r + (*records2,) for r in records1]
    Out[2]: [('a', 1, ('a1', 4)), ('b', 2, ('a1', 4)), ('c', 3, ('a1', 4))]
    

    json 은 유효하지 않은 듯 합니다.

    하려는 것이 무엇인지...명확해야 합니다.

    • 답변 감사합니다. 중간에 records1=zip(records1)으로 감싸준 후, [(('a', 1), [('a1', 4)]), (('b', 2), [('a1', 4)]), (('c', 3), [('a1', 4)])] 이형태로 만들어서 dict 하면, 소괄호당 하나씩 해서((a : 1), [(a1 : 4)]) 이렇게 key:value 매핑 되는지 알고있었는데, 그게 아니라 (('a', 1) : [('a1', 4)]) 이런식으로 되더라고요, 제가 잘못이해하고 있었네요ㅠ 알 수 없는 사용자 2018.11.29 09:55
    • 소괄호 하나씩 찾아가서 dict 해줘야 할거 같은데, 맨붕이네요ㅠ 알 수 없는 사용자 2018.11.29 09:58
    • 원하는 결과가 무엇이에요? json 은 문법에 맞지 않아요. 정영훈 2018.11.29 10:34
    • records1 안에 records2 를 넣는 건데, 제가 질문을 잘 못했던거 같아요.. 질문수정을 했는데, 답변해주신 방법으로 하니까 records1 앞부분은 key,value형태인데, 뒤쪽 추가된부분은 제가 다시 손봐야 할거 같아요. 알 수 없는 사용자 2018.11.29 11:45
    • records1을 dict으로 변환하면 변환된 records1 안에 리스트records2를 넣을 수 없는 거 같고, records2를 dict으로 변환 후 records1에 넣어도, dict 변환된 records2가 있어서 안되는 거 같아요.. 다른 방법이 없을까요? 알 수 없는 사용자 2018.11.29 13:20
  • 최대한 끊어서 코딩했으니 하나씩 보면 될겁니다.

    records1 = [(("a",1),("b",2),("c",3),("a1",4)),(("a",1),("b",2),("c",3),("a1",4))]
    records2 = [(("bb",2),("cc",3),("aa1",4))]
    records3 = [(("aa",1),("bb",2),("cc",3),("aa1",4))]
    
    m_r3 = [dict((n, m) for n, m in r) for r in records3]
    m_r2 = [{n: m for n, m in r} for r in records2]    # 이렇게도 할 수 있습니다.
    m_r1 = [r + (('records2', m_r2), ('records3', m_r3),) for r in records1]
    result = [{n: m for n, m in r} for r in m_r1]
    
    m_r2
    Out[86]: [{'bb': 2, 'cc': 3, 'aa1': 4}]
    
    m_r3
    Out[87]: [{'aa': 1, 'bb': 2, 'cc': 3, 'aa1': 4}]
    
    m_r1
    Out[88]: 
    [(('a', 1),
      ('b', 2),
      ('c', 3),
      ('a1', 4),
      ('records2', [{'bb': 2, 'cc': 3, 'aa1': 4}]),
      ('records3', [{'aa': 1, 'bb': 2, 'cc': 3, 'aa1': 4}])),
     (('a', 1),
      ('b', 2),
      ('c', 3),
      ('a1', 4),
      ('records2', [{'bb': 2, 'cc': 3, 'aa1': 4}]),
      ('records3', [{'aa': 1, 'bb': 2, 'cc': 3, 'aa1': 4}]))]
    
    result
    Out[90]: 
    [{'a': 1,
      'b': 2,
      'c': 3,
      'a1': 4,
      'records2': [{'bb': 2, 'cc': 3, 'aa1': 4}],
      'records3': [{'aa': 1, 'bb': 2, 'cc': 3, 'aa1': 4}]},
     {'a': 1,
      'b': 2,
      'c': 3,
      'a1': 4,
      'records2': [{'bb': 2, 'cc': 3, 'aa1': 4}],
      'records3': [{'aa': 1, 'bb': 2, 'cc': 3, 'aa1': 4}]}]
    
    • 계속 찿아보니까 dict.update 로 dict 끼리 연결 해주는 게 있어서 이것 저것 해보다가 코딩 한페이지 넘게 하고 있었는데, 4줄 만에 되는거 보니까 정말 신기하네요. 감사합니다. 알 수 없는 사용자 2018.11.30 09:31

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)