通过相应的键比较字典?

时间:2016-08-03 09:41:23

标签: python dictionary

我是Python的初学者。

我有两个词典,每个键都是一个产品,每个值都是每个产品的价格。

productData_1

我想要做的是按键和值比较两个字典,以便我可以看到两个字典之间的差异,例如:有不同的价格,_2--seed中缺少哪种产品?

我知道我必须以某种方式迭代这两个词,但我无法弄清楚如何去做。

5 个答案:

答案 0 :(得分:0)

在Python 3.5中:

productData_1 = {'product_1': '18', 'product_2': '15', 'product_3': '10', 'product_4': '9'}
productData_2 = {'product_1': '18', 'product_3': '12', 'product_2': '15'}

keys = set (productData_1.keys () + productData_2.keys ())

for key in keys:
    try:
        if productData_1 [key] != productData_2 [key]:
            print ('Mismatch at key {}'.format (key))
    except:
        print ('Entry missing at key {}'.format (key))

答案 1 :(得分:0)

for key in productData_1.keys()|productData_2.keys():
    if key not in productData_1:
        print('{} missing from productData_1!'.format(key))
        continue
    if key not in productData_2:
        print('{} missing from productData_2!'.format(key))
        continue
    print('Difference in prices for key "{}": {}'.format(key,abs(int(productData_1[key])-int(productData_2[key]))))

如果任一dict中缺少某个键,则会打印此代码,并打印每个键的值之间的绝对差值。

productData_1.keys()|productData_2.keys()将返回字典键的并集。

答案 2 :(得分:0)

keys_unique_to_1 = [key for key in productData_1 if key not in productData_2]
keys_unique_to_2 = [key for key in productData_2 if key not in productData_1]
common_keys = [key for key in productData_1 if key in productData_2]

diff = {key: int(productData_1[key]) - int(productData_2[key]) for key in common_keys}

print 'Keys unique to 1: ', keys_unique_to_1
# Keys unique to 1:  ['product_4']

print 'Keys unique to 2: ', keys_unique_to_2
# Keys unique to 2:  []

print 'Difference: ', diff
# Difference:  {'product_1': 0, 'product_3': -2, 'product_2': 0}

答案 3 :(得分:0)

在这个问题上有一个很好的页面here。您可以遍历两个词典并比较它们的值。下面的示例显示了如何打印值相等的键。

=============================================== ==========================

productData_1 = {' product_1':' 18',' product_2':' 15',' product_3' :' 10',' product_4':' 9'} productData_2 = {' product_1':' 18',' product_3':' 12',' product_2':&# 39; 15'}

对于Python 2.x -

for key_1, value_1 in productData_1.iteritems():
    for key_2, value_2 in productData_2.iteritems():
    if value_1 == value_2:
         print("key_1" + str(key_1))
         print("key_2" + str(key_2))

对于Python 3.x -

for key_1, value_1 in productData_1.items():
     for key_2, value_2 in productData_2.items():
     if value_1 == value_2:
         print("key_1" + str(key_1))
         print("key_2" + str(key_2))

答案 4 :(得分:0)

name = None
level = 0
for event, element in etree.iterparse(gzip.GzipFile(f), events=('end', 'start' ), tag='label'):
    # Update current level
    if event == 'start': level += 1;
    elif event == 'end': level -= 1;
    # Get name for top level label
    if level == 0:
        name = element.xpath('name/text()')
相关问题