2013-07-09 111 views
-4

我有一个列表,其中包含一堆元组,每个元组包含三个对象,一个id号,一个​​日期和一个状态,全部为字符串。以下是结构的一个例子。从元组列表中提取数据

[('1232', '07-10-13', 'yes'), ('1111', '07-10-13', 'no'), 
('90872', '07-05-13', 'no'), ('63563', '07-06-13', 'no'), 
('11111', '07-06-13', 'yes')] 

我想,作为输出,每个元组的日期和地位,但还需要一个日期出现在列表中的所有元组的次数。使用上面的示例,日期07-10-13出现两次。因此,对于每个元组,我应该得到日期,日期显示在整个列表中的时间以及该日期的状态,即'yes''no'

+0

您的描述有点不清楚。你能提供样本输出吗?另外,你有什么尝试? –

+0

我想画一个图。因为我想要相似的日期和状态。我有一个如上所示的数据列表。 – user1939565

+0

我的意思是给你一个你想要的计数样本的样本。我猜你想要这样的东西:'[('07 -10-13','是',1),...]'? –

回答

2
l = [('1232', '07-10-13', 'yes'), ('1111', '07-10-13', 'no'), ('90872', '07-05-13', 'no'), ('63563', '07-06-13', 'no'), ('11111', '07-06-13', 'yes')] 

res = {} 
for _, k, v in l: 
    if k not in res: 
     res[k] = [[v], 1] 
    else: 
     res[k][0].append(v) 
     res[k][1] += 1 

print res 

您还可以使用itertools:

from itertools import groupby 
from operator import itemgetter 

l = [('1232', '07-10-13', 'yes'), ('1111', '07-10-13', 'no'), ('90872', '07-05-13', 'no'), ('63563', '07-06-13', 'no'), ('11111', '07-06-13', 'yes')] 

res = {} 
for k, v in groupby(l, itemgetter(1)): 
    t = [x[2] for x in v] 
    res[k] = [t, len(t)] 

print res 

或只是一个班轮:)

res = {k[0]: [k[1], len(k[1])] for k in [(date, [x[2] for x in gr]) for date, gr in groupby(l, itemgetter(1))]} 

检查此链接Python group by

0
a=[('1232', '07-10-13', 'yes'), ('1111', '07-10-13', 'no'),('90872', '07-05-13', 'no'),('63563', '07-06-13', 'no'), ('11111', '07-06-13', 'yes')] 
dates=set([d for x,d,v in a]) 
for date in dates: 
    p=[v for x,d,v in a if d==date] 
    print date + "=" + str(len(p)) + " , " + ','.join(p) 

给出:

07-10-13=2 , yes,no 
07-05-13=1 , no 
07-06-13=2 , no,yes 
+2

我认为大量元素的表现不会很好 –