繁体   English   中英

将一本词典的键与另一本词典的键与值列表进行比较

[英]Comparing keys of one dictionary to another dictionary with a list of values

我有一本字典,其中列出了数量不等的项目值。 我想将此字典(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 = [如果dict中的k为dict2中的k,则k为dict2]

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进行一次搜索,然后使用哈希算法,该算法比遍历所有元素的速度要快得多。 对于dict2中没有dict1_value所有情况, dict2下的第一条语句都会失败,从而使catch块无害地pass

您是否正在寻找符合以下条件的产品:

[(k,i,dict2[i]) for k,v in dict1.items() for i in v if i in set(dict2.keys())]

对于dict2中作为键的每个值,返回dict1的键,值dic1和dic2的值。 可以对其进行编辑以返回字符串等。

输出:

[('boys', 'tom', 'garbage-specialist'),
 ('boys', 'jon', 'paper-shredderoligist'),
 ('girls', 'suzy', 'paper-stapler-extraordinaire')]

dict2.keys()上的set()用于使键查找更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM