我有这种独特的列表:
unique_list = {'apple', 'banana', 'coconut'}
我想找到在我的大型文本文件中确切出现了多少个元素。我只需要数字,而不是名字。例如,如果只为特定的人找到“苹果”和“香蕉”,则它应返回2。
对于每个人(姓名和姓氏),我需要获得这个人有多少这种独特的水果。在大文件中,这可能很困难。我需要最快的方法。
比方说,我从文本文件的名称:
people = {'cody meltin', 'larisa harris', 'harry barry'}
该文本文件为如下:
Name Fruit unit
cody melton apple 3
cody melton banana 5
cody melton banana 7
larisa harris apple 8
larisa harris apple 5
输出应如下所示:
{'cody meltin':2, 'larisa harris':1, 'harry barry':0}
我不想使用任何程序包,而仅使用内置程序和基本库。
答案 0 :(得分:0)
您可以利用python的基本库-collections
from collections import Counter
dict(Counter(pd.Series(['cody', 'cody ', 'cody ', 'melton', 'melton', 'harry'])))
输出
{'cody ': 2, 'melton': 2, 'cody': 1, 'harry': 1}
在上面的示例中,我传递了一个pd.Series
作为其参数,但在您的情况下,您可以将df['name']
传递给它,它是一个pd.Series
对象。
答案 1 :(得分:0)
您没有指定源数据的格式,所以我们说它是一个列表列表:
>>> data = [["cody melton", "apple", 3], ["cody melton", "banana", 5],
["cody melton", "banana", 7], ["larisa harris", "apple", 8],
["larisa harris", "apple", 5]]
在“香草” python中寻找性能时,请查看标准库-在这种情况下为collections.Counter
;我们将使用它来计算名称水果的所有唯一组合:
>>> pairs = Counter(((x[0], x[1]) for x in data))
>>> pairs
Counter({('cody melton', 'banana'): 2, ('larisa harris', 'apple'): 2, ('cody melton', 'apple'): 1})
该参数是一个迭代器,它从源数据中创建一个元组(name, fruit)
,而Counter
对它们的出现进行计数。
编辑:而且,如果您只想计算特定集合中的水果,则可以:
fruits = set(['apple', 'banana', 'coconut'])
,然后将其添加为理解条件:
>>> pairs = Counter(((x[0], x[1]) for x in data if x[1] in fruits))
我们快到了-剩下的就是计算各个名称的出现次数:
>>> names = Counter((pair[0] for pair in pairs))
>>> names
Counter({'cody melton': 2, 'larisa harris': 1})
>>> dict(names) # this is how to cast it to a regular dict
{'larisa harris': 1, 'cody melton': 2}
我看到您的输出中出现了0次“ harry barry”-显然它们没有出现在源data
中,因此只需将它们添加到值为0的字典中即可。
答案 2 :(得分:-1)
只需这样做:
xx = ['apple', 'apple', 'banana', 'coconut'];
d = dict()
for x in xx:
if x in d:
d[x] += 1
else:
d[x] = 1
print (d)