请耐心等待我,因为我对Python很陌生。基本上我正在寻找一种最有效的搜索多维列表的方法。所以说我有以下清单:
fruit = [
[banana, 6],
[apple, 5],
[banana, 9],
[apple, 10],
[pear, 2],
]
我希望我的功能产生结果:Apple:15,Banana:15,Pear 2.最有效的方法是什么?
答案 0 :(得分:9)
这绝不是一个搜索...
你想要的是
import collections
def count(items):
data = collections.defaultdict(int)
for kind, count in items:
data[kind] += count
return data
答案 1 :(得分:3)
fruit = [['banana', 6], ['apple',5], ['banana',9],['apple',10],['pear',2]]
f = {}
def fruit_count():
for x in fruit:
if x[0] not in f.keys():
f.update({x[0]:x[1]})
else:
t = f.get(x[0])
t = t + x[1]
f.update({x[0]:t})
return f
f = {'apple': 15, 'banana': 15, 'pear': 2}
答案 2 :(得分:1)
使用collections.defaultdict
累积,并遍历列表。
accum = collections.defaultdict(int)
for e in fruit:
accum[e[0]] += e[1]
答案 3 :(得分:0)
myHash = {}
fruit = [
[banana, 6],
[apple, 5],
[banana, 9],
[apple, 10],
[pear, 2],
]
for i in fruit:
if not i[0] in myHash.keys():
myHash[i[0]] = 0
myHash[i[0]] += i[1]
for i in myHash:
print i, myHash[i]
将返回
apple 15
banana 15
pear 2
我不知道python中的defaultdict。这是一个更好的方法。
答案 4 :(得分:0)
我不确定apple
和banana
是什么类型,因此我只将它们作为空类并使用它们的类名进行识别。解决此问题的一种方法是使用字典方法setdefault()
,它首先检查给定的键是否已经在字典中,如果它只是返回它,但如果不是,则将其插入默认值返回之前的值。
为了通过避免多个字典键查找来更有效地使用它来解决这个问题,与每个键相关联的计数需要存储在“可变”或可更改的内容中,因为简单的整数不在Python中。诀窍是将数字计数存储在可以更改的单元素list
中。下面代码中的第一个函数显示了如何做到这一点。
请注意,标准库中的Python collections
模块中有一个名为defaultdict
的字典子类,可以使用它而不是每当有效地执行setdefault()
操作时首先访问不存在的密钥。它还使得将计数存储在列表中以提高效率,并将其更新稍微简单一些。
在Python 2.7中,另一个字典子类被添加到名为collections
的{{1}}模块中。使用它可能是最好的解决方案,因为它专为这种应用而设计。下面的代码显示了如何以三种方式执行此操作(并对创建的总计列表进行排序)。
counter