我有一個列表,我需要將其製作成字典。該列表具有重複(即將成爲)具有不同值的鍵。我如何找到這些鍵並將新值添加到它?如果鍵已經存在,將值附加到鍵(python/jython)
list=[q:1,w:2,q:7]
dictionary= q:1,7
w:2
在此先感謝
我有一個列表,我需要將其製作成字典。該列表具有重複(即將成爲)具有不同值的鍵。我如何找到這些鍵並將新值添加到它?如果鍵已經存在,將值附加到鍵(python/jython)
list=[q:1,w:2,q:7]
dictionary= q:1,7
w:2
在此先感謝
請在你的字典列表中的值,讓你有:
dictionary = {'q': [1, 7],
'w': [2]
}
等即你的一個項的值是一個項目列表。這意味着,當你有另一'q'
,你可以這樣做:
dictionary['q'].append(5)
除dictionary['q']
將是一個KeyError
你第一次做,所以使用setdefault
代替:
dictionary.setdefault('q', []).append(5)
所以,現在你只需需要迭代輸入列表中的每個鍵和值對,並對它們中的每一個進行上述操作。
你可能或者想擁有dictionary
是:
dictionary = collections.defaultdict(list)
所以,你可以做dictionary['q'].append(5)
- 它將工作與上述相同,在各方面的酒吧之一。如果,你已經解析您的原始清單,並正確設置所有的值之後,你的字典是這樣的:
dictionary = {'q': [1, 7, 5]
'w': [2, 8, 10, 80]
'x': [3]
}
,並嘗試做print(dictionary['y'])
。你期望發生什麼?如果您使用正常的字典和setdefault
,這被認爲是一個錯誤,所以它會提高KeyError
。如果您使用defaultdict
,它將打印一個空列表。無論哪種方法對你的代碼更有意義都應該決定你編碼的方式。
更好的是,使用'collections.defaultdict(list)' - 然後你可以像使用普通字典一樣分配或查找。 –
@DavidRobinson在這種情況下'defaultdict'是否優於setdefault是有爭議的。當工廠功能昂貴時,他們的主要好處就來了 - 但建立一個空的清單並不是。 – lvc
我認爲這對代碼緊湊有利。您只需定義一次字典,但可能會在代碼中多次獲取或設置值。 –
列表通常不具有鍵值對。你的列表是由元組還是其他?此外,你想以什麼方式明確地將值附加到其他值 - 你是否將它們視爲字符串?因爲你的例子表明他們被視爲整數。 –