我有一本字典,里面有许多不同项目的值。
我想比较这个字典(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/