如何使用字典列表中的列表和字典理解来添加键和值?

时间:2019-04-11 07:15:43

标签: python python-3.x list dictionary

我有一个字典列表,

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” 吗?

3 个答案:

答案 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 comprehensionsif-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'}]