如何在元组列表中找到相同的元素并在Python中替换它?

时间:2015-08-03 21:42:44

标签: python python-3.x tuples

我有一个像这样的元组列表:

 t= [('A', 3000, '20140304'), ('B', 2000, '20140304'),('DD',3000, '20140304'), ('N', 102, '20140305'), ('S', 136, '20140305'), ('N', 182, '20140305'),('G',136, '20140305')]

我想找到它在同一天的价格是否相同。如果是,则返回一个带有名称的元组对的新列表。输出应该是这样的:

[('A','DD'),('S','G')]

2 个答案:

答案 0 :(得分:0)

import collections as coll

t = [('A', 3000, '20140304'), ('B', 2000, '20140304'),('DD',3000, '20140304'), ('N', 102, '20140305'), ('S', 136, '20140305'), ('N', 182, '20140305'),('G',136, '20140305')]

d = coll.defaultdict(lambda:coll.defaultdict(set))
for a,p,stackOverflow in t: d[stackOverflow][p].add(a)

for t in d:
    for p in d[t]:
        print("On day", t, ", the following items were sold at price", p, ':\n' + ','.join(sorted(d[t][p])))

答案 1 :(得分:0)

您可以将元组聚合为defaultdict,并将元组(price, date)作为关键字。迭代该defaultdict,并返回包含多个项目的任何名称列表。

from collections import defaultdict

price_date_dict = defaultdict(list)

for name, price, date in t:
    price_date_dict[(price, date)].append(name)

return [tuple(names) for names in price_date_dict.values() if len(names) > 1]