簡體   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