折叠python列表中的重复项

时间:2017-06-29 23:16:59

标签: python

抱歉,如果这是一个重复的帖子,但我找不到。

我目前正在尝试为正在开发的游戏制作广告资源。我遇到的问题是,当你有很多特定的项目时,它会浪费很多空间。

这是我的代码:( inv是库存)

inv = ["item1","item2","item3","item2","item2","item1"]

print(', '.join(inventory))

输出:

item1, item2, item3, item2, item2, item1

我想这样做,而不是这样做:

item1 x2, item2 x3, item3

我真的不在乎你是否需要将item3变成x1,无论哪种方式都没关系,谢谢。

3 个答案:

答案 0 :(得分:1)

实际上有很多选择。主要目标是计算您的物品,并按顺序打印出来。

一种选择是使用collections.OrderedDict。其他人是$ ps -o command 12345 |awk 'NR>1 { print $1 }' sleep / collections.Counter,但我会给你一个前者的例子:

collections.defaultdict

打印:

from collections import OrderedDict

counter = OrderedDict()

inv = ["item1", "item2", "item3", "item2", "item2", "item1"]
for i in inv:
    if i not in counter:
        counter[i] = 0

    counter[i] += 1

for c in counter:
    if counter[c] > 1:
        print(c + ' x{}'.format(counter[c]))
    else:
        print(c)

如果您想在一行中打印出来,可以根据需要随意修改此示例。这段代码是用python3.x编写的。

答案 1 :(得分:0)

以下是Counter的示例:

from collections import Counter

inv = ["item1", "item2", "item3", "item2", "item2", "item1"]

print (', '.join('%s x%d' % (item, count)
                 for item, count in sorted(Counter(inv).items())))

答案 2 :(得分:0)

['item1 x2', 'item2 x3', 'item3']

出:

idiv