python:从嵌套列表中删除时保留某些值

发布于 2025-01-17 14:01:49 字数 1230 浏览 2 评论 0原文

我有一个嵌套列表,如下所示:

my_list = [['id_1', {'frame':[{'door': 'window', 'closet':'pinches'}], 'utterance':'sentence number 1', 'speaker':'silver'}],
 ['id_2',{'frame':[{'door': 'window', 'closet':'pinches'},{'door': 'new_door', 'closet':'hinges'}], 'utterance':'sentence number 2', 'speaker':'silver'}],
 ['id_3', {'frame':[{'door': 'window', 'closet':'pins'}], 'utterance':'sentence number 3', 'speaker':'gold'}]]

如果列表包含值“gold”,我想从 my_list 中删除该列表,因此我执行了以下操作。

removed =[i for i in [item[1] for item in my_list] if not(i['speaker'] == 'gold')]

print(removed) 
#output: [{'frame': [{'door': 'window', 'closet': 'pinches'}], 'utterance': 'sentence number 1', 'speaker': 'silver'}, {'frame': [{'door': 'window', 'closet': 'pinches'}, {'door': 'new_door', 'closet': 'hinges'}], 'utterance': 'sentence number 2', 'speaker': 'silver'}]

但我想保留“id_number”,所以我想要的输出是:

my_new_list = [['id_1', {'frame':[{'door': 'window', 'closet':'pinches'}], 'utterance':'sentence number 1', 'speaker':'silver'}],
 ['id_2',{'frame':[{'door': 'window', 'closet':'pinches'},{'door': 'new_door', 'closet':'hinges'}], 'utterance':'sentence number 2', 'speaker':'silver'}]]

I have a nested list as follows:

my_list = [['id_1', {'frame':[{'door': 'window', 'closet':'pinches'}], 'utterance':'sentence number 1', 'speaker':'silver'}],
 ['id_2',{'frame':[{'door': 'window', 'closet':'pinches'},{'door': 'new_door', 'closet':'hinges'}], 'utterance':'sentence number 2', 'speaker':'silver'}],
 ['id_3', {'frame':[{'door': 'window', 'closet':'pins'}], 'utterance':'sentence number 3', 'speaker':'gold'}]]

I would like to remove a list from my_list if it contains the value 'gold', so I have done the following.

removed =[i for i in [item[1] for item in my_list] if not(i['speaker'] == 'gold')]

print(removed) 
#output: [{'frame': [{'door': 'window', 'closet': 'pinches'}], 'utterance': 'sentence number 1', 'speaker': 'silver'}, {'frame': [{'door': 'window', 'closet': 'pinches'}, {'door': 'new_door', 'closet': 'hinges'}], 'utterance': 'sentence number 2', 'speaker': 'silver'}]

But I would like to preserve the 'id_number', so my desire output is:

my_new_list = [['id_1', {'frame':[{'door': 'window', 'closet':'pinches'}], 'utterance':'sentence number 1', 'speaker':'silver'}],
 ['id_2',{'frame':[{'door': 'window', 'closet':'pinches'},{'door': 'new_door', 'closet':'hinges'}], 'utterance':'sentence number 2', 'speaker':'silver'}]]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

长亭外,古道边 2025-01-24 14:01:50

试试这个:

my_list = [['id_1', {'frame':[{'door': 'window', 'closet':'pinches'}], 'utterance':'sentence number 1', 'speaker':'silver'}],
 ['id_2',{'frame':[{'door': 'window', 'closet':'pinches'},{'door': 'new_door', 'closet':'hinges'}], 'utterance':'sentence number 2', 'speaker':'silver'}],
 ['id_3', {'frame':[{'door': 'window', 'closet':'pins'}], 'utterance':'sentence number 3', 'speaker':'gold'}]]
new_list = []
new_list.extend([i for i in my_list if i[1]['speaker'] != "gold" ])

Try this:

my_list = [['id_1', {'frame':[{'door': 'window', 'closet':'pinches'}], 'utterance':'sentence number 1', 'speaker':'silver'}],
 ['id_2',{'frame':[{'door': 'window', 'closet':'pinches'},{'door': 'new_door', 'closet':'hinges'}], 'utterance':'sentence number 2', 'speaker':'silver'}],
 ['id_3', {'frame':[{'door': 'window', 'closet':'pins'}], 'utterance':'sentence number 3', 'speaker':'gold'}]]
new_list = []
new_list.extend([i for i in my_list if i[1]['speaker'] != "gold" ])
前事休说 2025-01-24 14:01:49

我认为你只需要“切换”2个内联循环:

removed =[item for item in my_list if not(item[1]['speaker'] == 'gold')]

I think you just need to "switch" the 2 inline loops:

removed =[item for item in my_list if not(item[1]['speaker'] == 'gold')]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文