我的目录列表看起来是这样的:的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