Lis*_*adk 5 python dictionary loops key list
如果 dict 包含某个键,如何从另一个列表中的值向列表中的 dict 添加键?
我有一个字典列表。这些字典要么只包含一个键('review'),要么包含两个键('review' 和 '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']
Run Code Online (Sandbox Code Playgroud)
我尝试了以下操作,但由于对于包含关键“响应”的每个字典,我只想从每个列表的值中添加 1,因此我不确定如何执行此操作。
for d in data:
if 'response' in d:
for i in date:
d['date'] = i
for i in responder:
d['responder'] = i
Run Code Online (Sandbox Code Playgroud)
输出显示它当然只添加列表的最后一个值,因为我正在遍历列表。我怎样才能解决这个问题?
[{'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'}]
Run Code Online (Sandbox Code Playgroud)
您可以为日期和响应者列表创建迭代器,然后调用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'}
]
Run Code Online (Sandbox Code Playgroud)