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

Python 如何使用字典列表中的列表和听写理解添加键和值?,python,python-3.x,list,dictionary,Python,Python 3.x,List,Dictionary,我有一份字典的清单 ip_list = [{'1403': [-56, -58], 'data': '1'}, {'1403': [-56, -58], 'data': '0'}] 现在我需要在字典中添加一个新的键(即“mac”)和值(即“xyz”),如果字典包含的“data”=1,结果应该是 expected_outcome = [{'1403': [-56, -58], 'data': '1', 'mac':'xyz'}, {'

我有一份字典的清单

ip_list = [{'1403': [-56, -58], 'data': '1'},
           {'1403': [-56, -58], 'data': '0'}]
现在我需要在字典中添加一个新的键(即“mac”)和值(即“xyz”),如果字典包含的“data”=1,结果应该是

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'}]
有谁能帮助我在一个表达式中同时使用列表和听写理解来实现“预期结果”

list_dict_comp = [{'1403': [-56, -58], 'data': '1', 'mac':'xyz'},
                  {'1403': [-56, -58], 'data': '0', 'mac':'xyz'}]
是因为您正在向列表中的每个元素添加
{'mac':'xyz'}

如果ip_列表元素的键中存在
数据
,并且
数据
的值为
'1'

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'}]

使用
列表理解
在的帮助下解决此问题。您可以使用函数-

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'}]

这不是一个你应该用列表或听写理解来解决的问题。只需编写一个常规的ol'循环。对您编写的代码提供一些解释,以便下次有人阅读解决方案时,他知道是什么happening@DeveshKumarSingh事实上,没有解释会更好,因为这让我们更清楚这到底是一个多么难以理解的混乱局面。希望人们能避免使用这个。同意!很多时候,列表理解是一个非常不可读的混乱状态
dict(item,***{mac':'xyz')
可以重写为
dict(item,mac='xyz')
如果item中的'data'和item['data']='1'
可以缩短为
if item.get('data'))==“1”
不要使用带有副作用的列表理解:@Georgy感谢您提醒我。
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'}]