我正在用python弄湿我的脚。我有一个问题。我有一个数组和一个字典,我试图匹配它们之间的数据。我来自php背景,所以当我尝试学习python时,我可能会得到错误的术语。所以我们走了。
product = [{'id': 57L, 'product_name': '3-Piece Reversible Bonded Leather Match Sofa Set in Cream'}, {'id': 58L, 'product_name': '3-Piece Sage Microfiber Sectional Sofa Set with Faux Leather Ottoman'}, {'id': 663L, 'product_name': 'Recycled Plastic Adirondack Tete-a-tete'}, {'id': 717L, 'product_name': 'Designer 20-Bottle Wine Cabinet'}]
然后我将json文件加载到字典中,就像这样
productsChecked = json.loads(open('/Library/WebServer/Documents/scrapper/test2.json').read())
如果我打印,并循环使用productsChecked给我这样的东西
{u'price': u'$399.00', u'product_name': u'Glendale Brown PU Leather Ottoman with Pull-out Guest Bed', u'availability': u'In Stock'}
所以我现在有了这个
productsChecked = json.loads(open('/Library/WebServer/Documents/scrapper/test2.json').read())
for key, value in enumerate(productsChecked):
for v in value.iteritems():
print v
所以这给了我这个
(u'price', u'$93.00')
(u'product_name', u'Espresso Hand-Woven Cane Panel 2-Door Wall-Hanging Bathroom Cabinet')
(u'availability', u'In Stock')
我不确定这意味着什么...我想从上面获取product_name并希望将它与第一个产品数组中的product_name进行比较,如果json / dictionary中的product_name与产品数组中的product_name匹配,那么我想打印出匹配的product_name,但现在我不知道从哪里开始
答案 0 :(得分:4)
productsChecked
只是一个词典列表,因此您可以直接访问product_name
密钥 :
productsChecked = json.load(open('/Library/WebServer/Documents/scrapper/test2.json'))
print productsChecked[0]['product_name']
您可以检查products
中的任何项目是否与any()
匹配:
for check_product in productsChecked:
if any(p['product_name'] == check_product['product_name'] for p in product):
# match!
或者您可以使用循环搜索匹配的产品:
for check_product in productsChecked:
for prod in product:
if prod['product_name'] == check_product['product_name']:
print 'Match:', prod
匹配多个product
条目和,为您提供匹配的字典。
这一切都变得低效快速;你循环遍历两个列表,创建N * M循环。您可以通过将初始product
列表转换为字典来减少这种情况,以便进行快速O(1)恒定时间查找:
products_map = {p['product_name']: p for p in product}
这确实假设产品名称是唯一的。
现在您可以直接查找产品名称:
for check_product in productsChecked:
if check_product['product_name'] in products_map:
# the named product is in our map