我有一个字典列表,
ip_list = [{'1403': [-56, -58], 'data': '1'},
{'1403': [-56, -58], 'data': '0'}]
现在,如果字典包含'data'= 1且结果应为,则我需要在字典中添加新的键(即“ mac”)和值(即“ xyz”)
expected_outcome = [{'1403': [-56, -58], 'data': '1', 'mac':'xyz'},
{'1403': [-56, -58], 'data': '0'}]
我尝试过,
list_dict_comp = [dict(item, **{'mac':'xyz'}) for item in ip_list]
上面的表达式给出了
list_dict_comp = [{'1403': [-56, -58], 'data': '1', 'mac':'xyz'},
{'1403': [-56, -58], 'data': '0', 'mac':'xyz'}]
有人可以在单个表达式中同时使用列表和字典理解来帮助我实现“ expected_outcome” 吗?
答案 0 :(得分:3)
你得到的理由
list_dict_comp = [{'1403': [-56, -58], 'data': '1', 'mac':'xyz'},
{'1403': [-56, -58], 'data': '0', 'mac':'xyz'}]
是因为您要向列表中的每个元素添加{'mac':'xyz'}
。
为什么不让生活变得更轻松,而只是遍历ip_list,如果ip_list元素的键中存在{'mac':'xyz'}
,并且添加data
,并且data
的值为{ {1}}
'1'
答案 1 :(得分:1)
ip_list = [{'1403': [-56, -58], 'data': '1'},
{'1403': [-56, -58], 'data': '0'}]
res = [dict(item, **{'mac':'xyz'}) if 'data' in item and item['data'] == '1' else item for item in ip_list]
print(res)
# [{'1403': [-56, -58], 'data': '1', 'mac': 'xyz'}, {'1403': [-56, -58], 'data': '0'}]
答案 2 :(得分:1)
使用list comprehensions
在if-else
的帮助下解决此问题。您可以使用update()
函数-
ip_list = [{'1403': [-56, -58], 'data': '1'}, {'1403': [-56, -58], 'data': '0'}]
[i.update({'mac': 'xyz'}) if i['data']=='1' else i for i in ip_list]
print(ip_list)
[{'1403': [-56, -58], 'data': '1', 'mac': 'xyz'},
{'1403': [-56, -58], 'data': '0'}]