0

我被蟒蛇弄湿了。我有一个问题。我有一个数组和一个字典,我正在尝试匹配它们之间的数据。我来自 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 数组中的 product_name 匹配,那么我想打印out product_name 匹配但现在我不知道从这里去哪里

4

1 回答 1

4

productsChecked只是一个字典列表,因此您可以直接product_name访问密钥:

productsChecked = json.load(open('/Library/WebServer/Documents/scrapper/test2.json'))

print productsChecked[0]['product_name']

您可以检查是否有任何项目productsany()

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
于 2013-09-25T07:12:44.510 回答