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