2015-11-19 45 views
0

要求是迭代python中的每對唯一鍵組合並獲取每對鍵的值的交集列表。要做到這一點,我遍歷鍵兩次,第二次迭代,我繞過所有具有關鍵較小的值進行比較,以第一次迭代的關鍵的關鍵 -在Python中的某個鍵之後對python中的字典鍵進行迭代

for key1, val1 in dict.iteritems(): 
    for key2, val2 in dict.iteritems(): 
     if key2 <= key1: 
      continue 
     else: 
      #vertices common to both key1 and key2 will be 
      #in intersection list of its values 
      neighbours = [val for val in val1 if val in val2] 
      #--Further processing on list of neighbours 

如其他人所說後我可以創建字典鍵的組合並迭代它,但因爲我必須同時處理值我使用上面的方法。

什麼將是實現這一目標最Python的和有效的方式?

+0

好了,順序是任意的,但至少在迭代之間不應該改變。 – TigerhawkT3

回答

1

有很多更好的工具,使用itertools.combinations() generator配對每個鍵與所有其他鍵:

from itertools import combinations 

for (key1, val1), (key2, val2) in combinations(dictionary.items(), 2): 

演示:

>>> from itertools import combinations 
>>> dictionary = {'foo': 'bar', 'spam': 'eggs', 'monty': 'python'} 
>>> for (key1, val1), (key2, val2) in combinations(dictionary.items(), 2): 
...  print('Combining {!r}: {!r} with {!r}: {!r}'.format(key1, val1, key2, val2)) 
... 
Combining 'foo': 'bar' with 'monty': 'python' 
Combining 'foo': 'bar' with 'spam': 'eggs' 
Combining 'monty': 'python' with 'spam': 'eggs' 

您可能需要使用計算交點:

neighbours = set(val1).intersection(val2)