2017-10-16 31 views
4

如何在列表中將字符添加到字典中(如果字典包含某個鍵值)?從列表中的值向列表中的字符添加鍵字

我有一個列表的字典。這些詞典只包含一個鍵('review')或兩個鍵('review'和'response')。當dict包含關鍵字'response'時,我想添加兩個關鍵字,其中包含兩個列表中的值。

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'應該加上編輯爲字典的價值? –

+0

響應,日期和響應者同時被抓取和解析,因此第一次回覆的回覆屬於第一個日期和第一個響應者。 – Lisadk

+1

請你提供預期的輸出! – DexJ

回答

4

您可以爲您的日期和響應表迭代,然後調用next()在你的if語句從列表中採取的下一個項目

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循環詞典更新後只有一個Date鍵條目和只有一個響應條目

2

您可以試試這個,但要小心,因爲您列表中的response的數量應該等於您的列表的長度:

d_r = zip(date, responder) 

for d in data: 
    if 'response' in d: 
      d['date'], d['responder'] = next(d_r) 
print(data) 
相關問題