字典中唯一值的累计计数

0 投票
1 回答
1074 浏览
提问于 2025-04-16 10:07

我有一个很大的字典 dd{},里面记录了每个人和他们喜欢的水果集合:

A set(['Apple', 'Orange', 'Strawberries'])
B set(['Banana', 'Strawberries', 'Orange', 'Kiwi', 'Dates'])
C set(['Apple', 'Kiwi', 'Grapes'])
A set(['Banana', 'Orange', 'Apple', 'Lemon'])

我想要一个水果的累计计数,也就是说,对于第一个人,他喜欢的水果数量就是他的计数;对于第二个人,计数要加上第一个人喜欢的水果数量,再加上第二个人自己喜欢的、在第一个人喜欢的水果中没有的水果,以此类推。我想要的结果是这样的:

1 3
2 6
3 7
4 8

第一列是人的编号,第二列是水果的累计数量。我该如何在 Python 中实现这个呢?谢谢,Adia。

1 个回答

3

像这样吗?

allFruits = set()
for i,(k,v) in enumerate(sorted(dd.iteritems()), 1):
    allFruits.update(v)
    print i, len(allFruits)

这个方法适用于Python 2.6及更新版本。如果你用的是更旧的版本,可以试试这个:

allFruits = set()
for i,(k,v) in enumerate(sorted(dd.iteritems())):
    allFruits.update(v)
    print i+1, len(allFruits)

输入:

dd = {'A': set(['Apple', 'Orange', 'Strawberries']),
      'B': set(['Banana', 'Dates', 'Kiwi', 'Orange', 'Strawberries']),
      'C': set(['Apple', 'Grapes', 'Kiwi']),
      'D': set(['Apple', 'Banana', 'Lemon', 'Orange'])}

输出:

1 3
2 6
3 7
4 8

撰写回答