2017-10-16 5 views
4

목록에있는 dict에 dict에 특정 키가 들어 있으면 다른 목록의 값에서 키를 추가 할 수 있습니까?목록의 값에서 목록 내의 dicts에 키 추가

나는 딕트 목록을 가지고 있습니다. 이러한 사전에는 하나의 키 ('리뷰') 또는 두 개의 키 ('리뷰'및 '응답') 만 포함됩니다. dict에 키 '응답'이 포함되어 있으면 두 개의 키 값을 두 목록에 추가하고 싶습니다.

data = [{'response': 'This is a response', 
     'review': 'This is a review'}, 
     {'review': 'This is only a review'}, 
     {'response': 'This is also a response', 
     'review': 'This is also a review'}] 
date = ['4 days ago', 
     '3 days ago'] 
responder = ['Manager', 
      'Customer service'] 

나는 다음을 시도,하지만 각 목록에서 값에서 1을 추가 할 키 '응답'을 포함하는 각 딕셔너리에 대한 때문에, 나는이 작업을 수행하는 방법을 모르겠습니다.

for d in data: 
    if 'response' in d: 
     for i in date: 
      d['date'] = i 
     for i in responder: 
      d['responder'] = i 

결과를 보면 목록을 반복 할 때 목록의 마지막 값만 추가된다는 것을 알 수 있습니다. 이 문제를 어떻게 해결할 수 있습니까?

[{'date': '3 days ago', 
    'responder': 'Customer service', 
    'response': 'This is a response', 
    'review': 'This is a review'}, 
{'review': 'This is only a review'}, 
{'date': '3 days ago', 
    'responder': 'Customer service', 
    'response': 'This is also a response', 
    'review': 'This is also a review'}] 
+0

를 결정하려면 어떻게 date''에서 어떤 항목 'responder'는 추가되어야합니다. 사전에 값으로 ed? –

+0

응답, 날짜 및 응답자는 동시에 긁어서 파싱되었으므로 응답이있는 첫 번째 검토는 첫 번째 날짜와 첫 번째 응답자에 속합니다. – Lisadk

+1

예상되는 출력을 제공해주십시오. – DexJ

답변

4

명세서 목록에서 다음 항목을 취할 경우

data = [{'response': 'This is a response', 
     'review': 'This is a review'}, 

     {'review': 'This is only a review'}, 

     {'response': 'This is also a response', 
     'review': 'This is also a review'}] 

date = ['4 days ago', '3 days ago'] 
responder = ['Manager', 'Customer service'] 

d_iter = iter(date) 
r_iter = iter(responder) 

for d in data: 
    if 'response' in d: 
     d['date'] = next(d_iter) 
     d['responder'] = next(r_iter) 

print(data) 
>> [ 
{'date': '4 days ago', 
'review': 'This is a review', 
'responder': 'Manager', 
'response': 'This is a response'}, 

{'review': 'This is only a review'}, 

{'date': '3 days ago', 
'review': 'This is also a review', 
'responder': 'Customer service', 
'response': 'This is also a response'} 
] 
+1

좋은 직장. 나는 이것을 발전기를 사용하여 해결했지만,'iter'와'next' 조합은'for' 반복문보다 훨씬 깨끗합니다. – Vinny

0

날짜가 키와 값이 서로 다른 두 개의 항목을 추가하려고합니다. 사전에는 중복 키가 없습니다. 이것이 for 루프 사전이 하나의 날짜 키 항목과 하나의 응답자 항목으로 만 업데이트 된 이유입니다.

2

목록에서 숫자가 response이고 번호가 목록 길이와 동일해야하므로이 방법을 사용할 수는 있지만주의해야합니다.

d_r = zip(date, responder) 

for d in data: 
    if 'response' in d: 
      d['date'], d['responder'] = next(d_r) 
print(data) 
당신은 당신의 날짜와 응답자 목록에 대한 반복자를 만들고에 다음 next()를 호출 할 수 있습니다
관련 문제