我的目錄列表看起來是這樣的:的Python:從列表
[[4,'apples'],[3,'oranges'],[4,'bananas'],[2,'apples'],[2,'pineapple'],[3,'apples']]
我想創建這樣的字典,其中每個項目的值列: 例如,我想下面的輸出:
{4:'apples','bananas', 3:'oranges','apples', 2:'apples', 'pineapple'}
我的目錄列表看起來是這樣的:的Python:從列表
[[4,'apples'],[3,'oranges'],[4,'bananas'],[2,'apples'],[2,'pineapple'],[3,'apples']]
我想創建這樣的字典,其中每個項目的值列: 例如,我想下面的輸出:
{4:'apples','bananas', 3:'oranges','apples', 2:'apples', 'pineapple'}
dict.setdefault
可以在這裏幫助,如果你不想使用collections.defaultdict
:
lst = [[4,'apples'],[3,'oranges'],[4,'bananas'],[2,'apples'],[2,'pineapple'],[3,'apples']]
dct = {}
for num, name in lst:
dct.setdefault(num, []).append(name)
print(dct)
#{2: ['apples', 'pineapple'],
# 3: ['oranges', 'apples'],
# 4: ['apples', 'bananas']}
然而defaultdict
通常是更好的,更全面的解決方案。
,我只是好奇而改變了它,它比defaultdict快,即使你在每次迭代時創建一個有時不需要的列表。 –
@ Jean-FrançoisFabre它並不總是更快,進一步優化它使用一個綁定的方法'dctsetdefault = dct.setdefault'並在循環中使用!但實際的時間取決於列表的長度和重複鍵的數量(甚至可能在其他東西上)。如果使用'iteration_utilities.groupedby(lst,key = operator.itemgetter(0),keep = operator.itemgetter(1))'(但需要導入'operator'-模塊和一個外部庫),請關注速度。 – MSeifert
使用collections.defaultdict
:
result = defaultdict(list)
for key, value in [[4,apples],[3,oranges],[4,bananas],[2,apples],[2,pineapple],[3,apples]]:
result[key].append(value)
collections.defaultdict
可能對您有用。
from collections import defaultdict
items = [
[4, "apples"],
[3, "oranges"],
[4, "bananas"],
[2, "apples"],
[2, "pineapple"],
[3, "apples"]
]
mapping = defaultdict(list)
for number, name in items:
mapping[number].append(name)
defaultdict
官方文檔的例子會對您有所幫助。爲您服務
https://docs.python.org/3/library/collections.html#defaultdict-examples
機構代碼:
lst = [['4','apples'],['3','oranges'],['4','bananas'],['2','apples'],['2','pineapple'],['3','apples']]
result = {}
for item in lst:
key = item[0]
try:
result[key].append(item[1])
except:
result[key] = [item[1]]
print(result)
# {'3': ['oranges', 'apples'], '2': ['apples', 'pineapple'], '4': ['apples', 'bananas']}
如前所述通過@讓 - 弗朗索瓦·法布爾,該解決方案是相當緩慢:3,5秒BS5.7秒100000次迭代3, 5是defaultdict
的解決方案。
'4:['蘋果','香蕉']'? – depperm