我有一本字典,其中包含不同数量项目的值列表。 我想将这个字典(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/