![](/img/trans.png)
[英]Python compare a list of objects against a query set for two matching values?
[英]How to compare list of objects for a matching value?
我有一個產品列表,其中包含許多具有 id、image_url 等屬性的對象。 正如你在下面看到的:
total_products
[{u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQCG1ObwtCgqxZIk&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F1000000.png&cfs=1&_nc_hash=AQAPdo31zo9WJk8j', u'id': u'1539966686030963', u'retailer_id': u'product-1000000'}, {u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQDyc-Yyic5QLOqH&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F0.png&cfs=1&_nc_hash=AQDhmhPJxFZEpMFX', u'id': u'993388404100117', u'retailer_id': u'product-0'}, {u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQAwTzrzAjdKFjmB&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F1000.png&cfs=1&_nc_hash=AQCMMJRJ_r7QB06I', u'id': u'642820939176165', u'retailer_id': u'product-1000'}, {u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQBHdbRqB7F6aMKM&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F1.png&cfs=1&_nc_hash=AQDx7P52g0NYBB-3', u'id': u'1411912028843607', u'retailer_id': u'product-1'}, {u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQB7aSPmk_j21umz&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F100000.png&cfs=1&_nc_hash=AQAPV5oe_ymaAcXr', u'id': u'942522339181104', u'retailer_id': u'product-100000'}, {u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQB69V2cgASUIci1&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F100.png&cfs=1&_nc_hash=AQAk3eZ4vqWYbOW4', u'id': u'1347112758661660', u'retailer_id': u'product-100'}, {u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQD44rjEUMk6Yp2H&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F1000001.png&cfs=1&_nc_hash=AQBT_0iB417B08ux', u'id': u'1354204821311003', u'retailer_id': u'product-1000001'}, {u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQB4ucqXEbo2DyC7&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F1000002.png&cfs=1&_nc_hash=AQAQ2vuj0WmuXSqw', u'id': u'1776841739008769', u'retailer_id': u'product-1000002'}, {u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQBM75VZTNuxqaoq&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F10.png&cfs=1&_nc_hash=AQAUdkc6II5eu47D', u'id': u'1358784964179738', u'retailer_id': u'product-10'}, {u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQAY0kmVnHXBbhHe&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F10000.png&cfs=1&l&_nc_hash=AQCT1PHl5h1Rhc5r', u'id': u'1337513966312571', u'retailer_id': u'product-10000'}]
我正在閱讀一個包含如下數據的 csv 文件;-
正如你所看到的ID中csv_file id
和retailer_id
所以我想改變的是同樣為一些產品展示image_link
在csv file
,如果retailer_id
和id
匹配。
在這樣做時,我正在逐行讀取 csv 文件並遍歷total_products
所有產品,如果找到任何匹配項,請更改image_link
代碼:
def update_csv(file):
print file
reader = csv.DictReader(open(file))
out_file_name = str(file).replace(".csv", "")
writer = csv.DictWriter(open(out_file_name+"_updated.csv","wb"),fieldnames=reader.fieldnames)
writer.writeheader()
for current_row in reader:
for product in total_products:
retailer_id = product['retailer_id']
if(current_row['id']==retailer_id):
current_row['image_link']= "RajSharma"
print "Match = "+str(retailer_id)+" in "+file
break
writer.writerow(current_row)
這種方法的問題是如果total_products
包含超過 1000-10,000,則運行時間太長。
有沒有辦法找到retailer_id
在total_products
如果是這樣的改變image_link
?
首先,從total_products
創建一組 id:
product_ids = set([product['retailer_id'] for product in total_products])
然后,檢查current_row['id']
是否在集合中:
for current_row in reader:
if current_row['id'] in product_ids:
current_row['image_link'] = 'RajSharma'
搜索集合要快得多,我們只需要一個唯一產品 ID 的列表來檢查。 if current_row['image_link'] in product_ids
使用if current_row['image_link'] in product_ids
利用底層 C 代碼進行循環,從而優化對集合中值的檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.