How to add a key and value using list and dict comprehension in list of dictionaries?
我有一个字典列表,就是,
1 2 | ip_list = [{'1403': [-56, -58], 'data': '1'}, {'1403': [-56, -58], 'data': '0'}] |
现在,我需要在字典中添加一个新的键(即"mac")和值(即"xyz"),如果字典包含"data"=1并且结果应该是,
1 2 | expected_outcome = [{'1403': [-56, -58], 'data': '1', 'mac':'xyz'}, {'1403': [-56, -58], 'data': '0'}] |
我试过了,
1 | list_dict_comp = [dict(item, **{'mac':'xyz'}) for item in ip_list] |
鉴于,上述表达式给出:
1 2 | list_dict_comp = [{'1403': [-56, -58], 'data': '1', 'mac':'xyz'}, {'1403': [-56, -58], 'data': '0', 'mac':'xyz'}] |
有人能帮我用单句话同时使用列表和听写理解来达到"预期的结果"吗?
你得到的原因
1 2 | list_dict_comp = [{'1403': [-56, -58], 'data': '1', 'mac':'xyz'}, {'1403': [-56, -58], 'data': '0', 'mac':'xyz'}] |
这是因为您要向列表中的每个元素添加
为什么不让你的生活更轻松,只需迭代IP_列表,如果IP_列表的某个元素的键中存在
1 2 3 4 5 6 7 8 | ip_list = [{'1403': [-56, -58], 'data': '1'}, {'1403': [-56, -58], 'data': '0'}] for ip in ip_list: if ip.get('data') == '1': ip['mac'] = 'xyz' print(ip_list) #[{'1403': [-56, -58], 'data': '1', 'mac': 'xyz'}, {'1403': [-56, -58], 'data': '0'}] |
在
1 2 3 4 5 6 7 | 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'}] |
1 2 3 4 5 | 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'}] |