[英]How to remove duplicated keys in reverse order from dictionary (python)
在以下情況下,我正在努力從字典中刪除相同的鍵:
{('cat', 'tiger'): 18,
('tiger', 'cat'): 18,
('chines', 'gentleman'): 7,
('gentleman', 'chines'): 7}
在這種情況下,我將顛倒順序('cat', 'tiger'): 18
和('tiger', 'cat'): 18
視為相同的鍵,並嘗試制作如下的新字典
{('cat', 'tiger'): 18,
('gentleman', 'chines'): 7}
當我有一個類似的字典要合並時,我想嘗試的是適應任何逆序情況,例如{(('cage', 'cat'), 5),(('cat', 'cage'), 5)}
或刪除,一個。
您可以按照以下方式進行操作:
d = {('cat', 'tiger'): 18,
('tiger', 'cat'): 18,
('chines', 'gentleman'): 7,
('gentleman', 'chines'): 7}
result = {tuple(sorted(x)): y for x, y in d.items()}
# {('cat', 'tiger'): 18, ('chines', 'gentleman'): 7}
在此dict
理解中,每組“相等”鍵的最后遇到的值將獲勝。 對於您的樣本數據,這無關緊要,因為這些鍵具有等效值。 請注意,這也只是對元組進行排序,而不管原始dict
實際出現的排序版本如何。
問題是您使用tuple
值作為鍵,但是tuple
對象是有序的,因此('a','b')
與('b','a')
。 一個簡單的解決方案? 使用無序但可哈希的容器,即,可使用Frozenset:
>>> data = {('cat', 'tiger'): 18,
... ('tiger', 'cat'): 18,
... ('chines', 'gentleman'): 7,
... ('gentleman', 'chines'): 7}
>>>
>>> data
{('cat', 'tiger'): 18, ('tiger', 'cat'): 18, ('chines', 'gentleman'): 7, ('gentleman', 'chines'): 7}
>>> {frozenset(k):v for k,v in data.items()}
{frozenset({'cat', 'tiger'}): 18, frozenset({'gentleman', 'chines'}): 7}
如果您不關心鍵中兩個項目的順序...,並且與它們關聯的值始終相同,那么假設起始字典為old_dict
,最簡單的方法可能是:
new_dict = dict()
for (key, value) in old_dict.items():
new_dict[tuple(sorted(key))] = value
您只需遍歷鍵/值對,然后將它們添加到new_dict
。 由於我們現在對鍵進行了排序,然后將結果列表返回到元組,因此,我們確保不會再出現任何一對夫婦覆蓋先前的條目。
除了從中刪除項目,您還可以隨心所欲地休息。
data={('cat', 'tiger'): 18,
('tiger', 'cat'): 18,
('chines', 'gentleman'): 7,
('gentleman', 'chines'): 7}
track={}
for i,j in data.items():
track[tuple(sorted(i))]=j
print(track)
輸出:
{('cat', 'tiger'): 18, ('chines', 'gentleman'): 7}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.