我见过的Python:从列表中删除词典和拆分字典列表进入字典的若干名单-但这个问题略有不同。
考虑这个工作示例(在 Python 2 或 3 中相同):
#!/usr/bin/env python
from __future__ import print_function
origarr = [
{ 'name': 'test01', 'type': 0, 'value': 42 },
{ 'name': 'test02', 'type': 0, 'value': 142 },
{ 'name': 'test03', 'type': 2, 'value': 242 },
{ 'name': 'test04', 'type': 2, 'value': 342 },
{ 'name': 'test05', 'type': 3, 'value': 42 },
]
print("origarr: {}".format(origarr))
lastdictelem = origarr.pop()
print("\nlastdictelem: {}".format(lastdictelem))
print("after pop, origarr: {}".format(origarr))
namestofilter = [ 'test01', 'test02' ]
newarr = []
for iname in namestofilter:
# find the object having the name iname
foundidx = -1
for ix, idict in enumerate(origarr):
if idict.get('name') == iname:
foundidx = ix
break
if foundidx > -1:
# remove dict object via pop at index, save removed object
remdict = origarr.pop(foundidx)
# add removed object to newarr:
newarr.append(remdict)
print("\nafter namestofilter:")
print("newarr: {}".format(newarr))
print("origarr: {}".format(origarr))
现在,我想做的是定义一个数组,其中name包含字典中键的值(例如,namestofilter = [ 'test01', 'test02' ]),并将这些字典从原始数组/列表中删除,然后放入新的数组/列表中(就像.pop()会做的那样带有单个元素和对象引用)。
由于pop删除特定索引处的项目并返回它,因此上面的代码正是这样做的 - 并且有效:
...
after namestofilter:
newarr: [{'name': 'test01', 'type': 0, 'value': 42}, {'name': 'test02', 'type': 0, 'value': 142}]
origarr: [{'name': 'test03', 'type': 2, 'value': 242}, {'name': 'test04', 'type': 2, 'value': 342}]
...但我想知道 - 除了“手动” -for循环遍历两个数组并单独调用.pop()/ .append()(如示例中所做的那样)之外,是否有更紧凑的方法来做到这一点?
慕妹3146593
相关分类