[英]Return values from one dictionary by comparing keys from another dictionary
[英]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.