Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何添加列表中的特定部分?_Python_List - Fatal编程技术网

Python 如何添加列表中的特定部分?

Python 如何添加列表中的特定部分?,python,list,Python,List,我有一个包含大量数据的列表,格式为:date,month,data 我想所有的条目与相同的日期,以总结他们的所有数据和输出只是日期,数据。换句话说,数据看起来像这样 [(1/1/2011, August, 5), (1/1/2011, July, 4), (1,1,2011, June, 1), (1/6/2011, December, 5)] 对于本例,我希望输出如下: [(1/1/2011, 10), (1/6/2011, 5)] 我该怎么做呢?我知道这将涉及一个for循环,如果一个日期

我有一个包含大量数据的列表,格式为:
date,month,data

我想所有的条目与相同的日期,以总结他们的所有数据和输出只是日期,数据。换句话说,数据看起来像这样

[(1/1/2011, August, 5), (1/1/2011, July, 4), (1,1,2011, June, 1), (1/6/2011, December, 5)]
对于本例,我希望输出如下:

[(1/1/2011, 10), (1/6/2011, 5)]

我该怎么做呢?我知道这将涉及一个for循环,如果一个日期是相似的,它将总结数据。但是我很困惑如何去做。使用字典来保存唯一的日期:

dates = {}
for (date, month, day) in your_list:
    if date not in dates:
        dates[date] = day
    else
        dates[date] += day
如果您希望按照指定的方式输出,则必须返回列表:

outlist = []
for (date, daycount) in dates.items():
    outlist.append( (date, daycount) )

也就是说,每当您使用日期时,将其存储为datetime对象通常很有用,然后添加日期等操作就更简单了。

找到列表中的所有日期,然后您可以计算每个日期:

dates = [('1/1/2011', 'August', 5), ('1/1/2011', 'July', 4),
         ('1/1/2011', 'June', 1), ('1/6/2011', 'December', 5)]

each_date = set(d[0] for d in dates)

count_dates = [(d, sum(i[2] for i in dates if i[0] == d)) for d in each_date]

print(count_dates)
# -> [('1/6/2011', 5), ('1/1/2011', 10)]

这是一个基于以下内容的单行程序:


请注意,对于这个演示,我使用了与@alecrasmussen的答案相同的
日期
,因为OP提供的数据不能被Python解释。

您的输入是不同的。@RahulKP给定的输入不一样parse@JaredGoguen用问题和答案检查输入。@RahulKP无论日期如何,它都应该仍然有效格式化(除非是带有日期和时间数据的datetime对象)。正如filifunk所说,列表将返回一个NameError,尝试分配一个名为1/1/2011的变量将产生一个SyntaxError,因为/是一个运算符。在第一个循环中,您还可以使用
dates=collections.defaultdict(int)
,然后只使用
dates[date]+=day
,而不是
if-else
我怎么会不知道呢?对于第二段代码,可能是
outlist=list(dates.items())
对于Python3.X或
outlist=dates.items()
对于Python2.X,您还可以通过
dict.get()摆脱
if-else
语句
方法,将默认值设置为
0
dates[date]=day+dates.get(date,0)
这些都是很好的建议,但我将保持原样,以便OP可以尝试if/else方法,然后使用这些更高级的概念使其更简洁。然后他/她可以发表评论并实施这些好的技巧
>>> from itertools import groupby
>>> from operator import itemgetter
>>> dates = [('1/1/2011', 'August', 5), ('1/1/2011', 'July', 4), 
             ('1/1/2011', 'June', 1), ('1/6/2011', 'December', 5)]
>>> [(date, sum(map(itemgetter(-1), group))) for (date, group) in groupby(dates, key=itemgetter(0))]
[('1/1/2011', 10), ('1/6/2011', 5)]