![](/img/trans.png)
[英]How to omit key and value when creating list of dictionaries using comprehension
[英]How to add a key and value using list and dict comprehension in list of dictionaries?
我有一個字典列表,
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理解來實現“expected_outcome”嗎?
你得到的原因
list_dict_comp = [{'1403': [-56, -58], 'data': '1', 'mac':'xyz'},
{'1403': [-56, -58], 'data': '0', 'mac':'xyz'}]
是因為您要向列表中的每個元素添加{'mac':'xyz'}
。
為什么不讓你的生活更輕松,只需迭代ip_list,如果ip_list元素的鍵中存在data
則添加{'mac':'xyz'}
, data
值為'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'}]
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'}]
使用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'}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.