我有一本字典,里面有许多不同项目的值。
我想比较这个字典(dict1)的值和另一个字典(dict2)的键,如果它们匹配,则打印dict1的匹配组件的键和值,以及dict2的值。
这两本词典都相当大,而且目前这花费的时间太长了,您可能已经从这个基本脚本中猜到了。

dict1 = {boys:[tom,jon],girls:[suzy]}

dict2 = {suzy:paper-stapler-extraordinaire,jon:paper-shredderoligist,tom:garbage-specialist}

输出:
    boys \t tom \t garbage-specialist

    boys \t jon \t paper-shredderoligist  etc.....

for k,v in dict2.items():

    for key,value in dict1.items():
         if k in value[0]:
             print str(key)+"\t"+str(value[0])+"\t"+v
         if len(value)>1:
             if k in value[1]:
                 print str(key)+"\t"+str(value[0])+"\t"+v

有人能推荐一种更有效的记忆方法吗?也许是一个列表理解?
这不起作用。。。
a=[dict2中的k表示k,如果dict中的k表示k]

最佳答案

for dict1_key, dict1_values in dict1.iteritems():
    for dict1_value in dict1_values:
        try:
            dict2_value = dict2[dict1_value]
            print str(dict1_key) + '\t' + str(dict1_value) + '\t' + str(dict2_value)
        except KeyError:
            pass

它结合了一些技术来提高速度和使用更少的内存。iteritems使用更少的内存(如其他人所述)。通过使用try然后使用dict2[dict1_value],可以确保只搜索一次dict2,然后使用hash算法,这应该比遍历所有元素快得多。对于所有dict2中没有dict1_value的情况,try下的第一个语句都失败,导致catch块无害地pass

关于python - 将一本词典的键与另一本词典的键与值列表进行比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19614488/

10-09 18:49