python - 将一个字典的键与另一个字典的键与值列表进行比较

标签 python list dictionary list-comprehension

我有一本字典,其中包含不同数量项目的值列表。 我想将这个字典(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 = [k for k in dict2 if k in dict]

最佳答案

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 block 无害通过

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

相关文章:

python - 在 Python 中交叉列表列表的最有效方法?

python - 我如何通过行数找到Python中的唯一记录?

java - 在数组列表上使用分隔符

python - KeyError: '\n' python 2.7.5

python - 在 Python 中获取字典子集时出错

iOS SDK - MapKit MKAnnotationView 问题 - 位置和多个注释?

python - Python的模式匹配性能如何?是O(1)吗?

python - 在 C 中,如何在没有嵌套函数的情况下为一个函数提供另一个函数的作用域?

python - 磁盘上有 70 MB 但内存中有 500 MB 的列表

php - 如何获取数组中的每个用户列表