您可以通過這兩個按鍵的set intersection迭代:
>>> set(a.keys()) & set(b.keys())
set(['a', 'c', 'b', 'd'])
下面是與類型的字典是不完全類似的例子:
from collections import Counter
a = Counter({'a':1,'b':2,'c':3,'d':4,'e':5})
b = Counter({'a':2,'b':4,'c':6,'d':8,'f':7})
common_keys = set(a.keys()) & set(b.keys())
for key in common_keys:
print("%s %d %d" % (key, a[key], b[key]))
# a 1 2
# c 3 6
# b 2 4
# d 4 8
請注意,轉換到set
不preverse的Counter
順序。
你可以轉換set
爲list
,並根據這兩個值的總和進行排序:
a = {'a':1,'b':2,'c':3,'d':4,'e':5}
b = {'a':2,'b':4,'c':6,'d':8,'f':7}
common_keys = list(set(a.keys()) & set(b.keys()))
common_keys.sort(key=lambda k: a[k] + b[k], reverse=True)
for key in common_keys:
print("%s %d %d" % (key, a[key], b[key]))
# d 4 8
# c 3 6
# b 2 4
# a 1 2
最後,如果你不關心根據其值之和排序的關鍵,這裏是你的代碼稍加修改的版本:
from collections import Counter
a = Counter({'a':1,'b':2,'c':3,'d':4})
b = Counter({'a':2,'b':4,'c':6,'d':8})
for key, a_value in a.most_common():
if key in b:
print("%s %d %d" % (key, a_value, b[key]))
是不是將一個集合轉換爲一個列表,然後對它進行一些過度設計?我認爲在這種情況下簡單地遍歷'most_common'中的鍵然後進行成員測試是很容易的,因此您只需要一次傳遞。 –
@ juanpa.arrivillaga:是的。我仍然想保留most_common功能。感謝評論,我更新了代碼,但後來認識到它基本上是你已經寫的。 –
嗯,我不是荷蘭人或類似的東西,但我想應該只有一個明顯的方法來做到這一點;) –