0
我有4個表:試圖做一個自然連接使用python標準庫
shops
(屬性:shop_id
,name
,lat
,lng
)products
(屬性:product_id
,shop_id
,title
,popularity
tags
(屬性:tag_id
,tag
)taggings
(屬性:tagging_id
,shop_id
,tag_id
)
我想做的事情在我的所有表的自然連接,只產生一個表。自然連接與內部連接相同,但shops.shop_id
= products.shop_id
= taggings.shop_id
和tags.tag_id
= taggings.tag_id
。
import csv
print "This is going to take a while ..."
shops = list(csv.reader(open('data/shops.csv'), delimiter=','))
products = list(csv.reader(open('data/products.csv'), delimiter=','))
tag = list(csv.reader(open('data/tags.csv'), delimiter=','))
taggings = list(csv.reader(open('data/taggings.csv'), delimiter=','))
shops_products = []
hash_ = {}
for idx, row1 in enumerate(shops):
hash_[row1[0]] = idx
for row2 in products:
if row2[1] in hash_:
shops_products.append(shops[hash_[row2[1]]] + row2)
print "shops_products done ..."
print len(shops_products)
tags_taggings = []
hash_ = {}
for idx, row1 in enumerate(tag):
hash_[row1[0]] = idx
for row2 in taggings:
if row2[2] in hash_:
tags_taggings.append(tag[hash_[row2[2]]] + row2)
print "tags_taggings done ..."
print len(tags_taggings)
現在我有一個名爲shops_products
,tags_taggings
2個表。如果我把它們合併在一起,我就得到我想要的桌子。
然而,shops_products
和tags_taggings
具有相同shops_id
很多行,所以我不能把它們合併我合併表shops
,products
,tags
,taggings
的方式。
我可以使用嵌套循環合併它們,但這會導致O(n^2)複雜度超過40分鐘才能完成。
我需要幫助搞清楚如何以我在代碼中加入其他表的方式進行此操作。這將是一個令人滿意的O(n),並很快完成。
能告訴你的決賽桌將是什麼樣子的樣本? –
它要具有屬性shop_id,名稱,緯度,經度的product_id,shop_id,標題,人氣,數量TAG_ID,TAG_NAME,tagging_id,shop_id,TAG_ID 我知道某些屬性具有相同的名稱,這僅僅是一個側面合併這些表格的效果,而不用費力去搞清楚現在如何去除重複的列,但重複的屬性將具有相同的信息。如果您需要任何其他信息可以幫助您獲得更好的圖片,請告訴我,並致謝 – RetroCode
「產品」表有多個參考商店?例如有兩種產品具有相同的'shop_id'。 –