我在Lambda函数(python)中有两个JSON对象。我想将对象2中的键与对象1中的键进行比较,并删除对象1中不包含的任何项。你知道吗
每个对象中都有几百个项,因此嵌套for循环将花费太长时间。我找到了diffpy,但这需要一个模块导入到lambda中,我希望最好有一个本地python解决方案(以最小化lambda函数的大小)。你知道吗
object1 = [{'name': 'apple', 'price': 100}, {'name': 'grape', 'price':
150}, {'name': 'orange', 'price': 40}]
object2 = [{'name': 'apple', 'price': 200}, {'name': 'grape', 'price':
350}, {'name': 'orange', 'price': 40}, {'name': 'mango', 'price': 400}]
在上面的示例中,预期的newObject应该只有第一个对象的name key/value和两个对象的price key/value。对象2中的Mango不包含在对象1中,因此我们可以忽略它。你知道吗
newObject = [{'name': 'apple', 'priceA': 100, 'priceB': 200}, {'name':
'grape', 'priceA': 150, 'priceB': 350}, {'name': 'orange', 'priceA': 40,
'priceB': 40}]
我尝试使用以下代码来实现:
newHash= {}
newObject = []
for item in object1:
name = item["name"]
priceA = item["price"]
for item in object2:
if name == item["name"]:
newHash["name"] = item["name"]
newHash["priceA"] = priceA
newHash["priceB"] = item["price"]
newObject.append(newHash)
好吧,正如评论中已经提到的,这个问题有点不完整,因为我们不知道如果两个集合中都有相同的名称,并且价格不同,你想怎么做。你知道吗
如注释中所述,可以使用set对象及其.intersection()方法来获得所需的内容。你知道吗
在假设lambda的第一个参数优先的情况下,这应该是可行的。您可以将“o1中的x代表x”更改为“o2中的x代表x”,以使第二个版本优先。你知道吗
如果你想把价格不同但名称相同的东西排除在外,事情会变得更复杂一些。我不知道您的用例是什么,也不知道为什么对象是按原样构造的,但如果您这样做可能会更容易:
很明显,这不是lambda或单行程序,而是更灵活一些(例如,去掉if部分,使object1优先,而不是排除冲突的值)。你知道吗
除非您修改对象的结构,否则您显示的代码将尽可能地“优化”,因为您使用的是字典列表,因此无法删除嵌套循环,这些循环将遍历每个列表以找到正确的字典。你知道吗
考虑将这些名称用作
object1
和object2
中的键,即{'apple': 100, 'grape': 150}
。通过这种方式,您将可以直接访问以找到公用密钥。输出的结构可以如您所愿。你知道吗相关问题 更多 >
编程相关推荐