我正在查询一个API以尝试在JSON中查找新条目,我一直在研究如何“减去”这两个列表,以便得到一个新的JSON对象,该对象在这两个列表之间只有新条目
我现在做的是:
^^这就是我的困境,我可以比较值,但我不知道如何只找到新值并迭代它们
我基本上在监视这个API: https://qzlsklfacc.medianetwork.cloud/nft_for_sale?collection=galacticgeckospacegarage
并试图找到新的物品和新售出的物品
现在,为了比较现有项目之间的差异,我正在执行以下操作:
# check if new listings are the same as the old listings
if prevListings != newListings:
await bot.get_channel(893292122298540083).send("New listings found!")
for listingOld in prevListings:
for listingNew in newListings:
if listingNew['id'] == listingOld['id']:
if listingNew['lastSoldPrice'] is not None:
if listingNew['lastSoldPrice'] != listingOld['lastSoldPrice']:
Do something.
因此,这两个问题是:
这是JSON响应中每个项的JSON结构
0000:
'id':1155682
'token_add':'HV4duJjY67DD4doX9ffvzfoaENAAkFuwz9qtbwAweDAG'
'number':1
'currency':'SOL'
'price':29
'link_img':'https://www.arweave.net/iZs-LiMAg5mIqaqxrd--EtcKhHTNtPZFPrZyIK95nUc?ext=jpeg'
'for_sale':1
'programId':'CJsLwbP1iu5DuUikHEJnLfANgKy6stB2uFgvBBHoyxwz'
'name':'Galactic Gecko #6376'
'description':'undefined'
'escrowAdd':'4TULtxsixV4NLdZWqY45d4Mz5XrE4q4CfTECNcvaZDY1'
'seller_address':'Er6QJPusC1JsUqevTjFKXtYHbgCtJkyo1DNjEBWevWut'
'attributes':'Faction: Barada,Body: Light Pink,Armor: Planetary Kirtle,Mouth: Pensive,Helmet: Signal Deflector,Ears: Planetary Muffler,Eyes: Augmented Surveyor'
'skin':None
'type':'galacticgeckospacegarage'
'ranking':None
'buyerAdd':None
'blockhash':None
'lastSoldPrice':13.99
我正在使用Python 3.8
谢谢大家!
尝试下面的(
data_1
和data_2
表示2个API调用的结果)输出
您采取的方法取决于顶级键(例如
0000
)是否对单个对象唯一。如果是,您可以使用这些键来过滤返回的对象,如果不是,您需要做更多的工作顶级密钥是ID
如果顶级键对于对象是唯一的,您可以简单地迭代新字典,看看它的键是否在现有字典中。在下面的代码中
first
是初始字典,second
是我们的第二个响应。输出存储在字典third
中因此,我们迭代
second
字典,检查每个键是否在first
字典中。如果它不是,我们将它添加到third
您也可以使用字典理解来完成此操作(相同的结果)
id在数据中
如果键不是ID,那么您就有一个问题:您需要通过嵌套在第一个字典数据中的内容来过滤第二个字典。我们可以为
second
中的每个条目迭代first
字典,但这很慢因为我们只想知道它是否在那里,所以我们可以将需要检查的值(例如
id
)提取到一个新变量中。因为查找速度很快,所以设置一个集合是很好的或者,再一次用听写理解
如您所见,我们在
first
字典上迭代一次以构建我们的ID集。然后可以使用它快速测试second
字典中接收的新数据是否为新数据。如果是,我们将其添加到字典third
相关问题 更多 >
编程相关推荐