Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/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_Python 2.7_Dictionary - Fatal编程技术网

Python 对字典中具有相同键的值求和

Python 对字典中具有相同键的值求和,python,list,python-2.7,dictionary,Python,List,Python 2.7,Dictionary,我有以下词典列表: [{'Total Incidents': '1', 'CrimeTime': '19'}, {'Total Incidents': '1', 'CrimeTime': '19'}, {'Total Incidents': '1', 'CrimeTime': '19'}, {'Total Incidents': '1', 'CrimeTime': '20'}, {'Total Incidents': '1', 'CrimeTime': '20'}, {'Tot

我有以下词典列表:

[{'Total Incidents': '1', 'CrimeTime': '19'}, 
 {'Total Incidents': '1', 'CrimeTime': '19'}, 
 {'Total Incidents': '1', 'CrimeTime': '19'}, 
 {'Total Incidents': '1', 'CrimeTime': '20'}, 
 {'Total Incidents': '1', 'CrimeTime': '20'},
 {'Total Incidents': '1', 'CrimeTime': '21'},
 {'Total Incidents': '1', 'CrimeTime': '21'}]
我需要将“Total Incidents”的值转换为int,并将它们相加,对于在同一小时内发生的每个事件,分钟和秒是不相关的。输出应如下所示:

[{'Total Incidents': 3, 'CrimeTime': '19'},
 {'Total Incidents': 2, 'CrimeTime': '20'},
 {'Total Incidents': 2, 'CrimeTime': '21'}]
我使用了这种方法:

 [{ 'CrimeTime':       g[0], 
    'Total Incidents': sum(map(lambda x: int(x['Total Incidents']), g[1])) } 
  for g in itertools.groupby(mydata, lambda x: x['CrimeTime']) ]
但不幸的是,有时它会重复“CrimeTime”,所以我得到了两本具有相同“CrimeTime”的词典,而不是只有一本具有总结事件的词典。原来的列表要大得多,我只是用了一个简短的版本来更好地解释自己


如果您不理解我的问题,请随时提问,这样我可以更好地解释自己。

在大多数情况下,如在您的情况下,如果数据按分组键排序,效果最好,因为它只对相邻元素进行分组:

key = lambda x: x['CrimeTime']
[
    {'CrimeTime': k, 'Total Incidents': sum(int(x['Total Incidents']) for x in g)} 
    for k, g in itertools.groupby(sorted(mydata, key=key), key=key)
]

使用生成器表达式而不是map lambda主要是一个趣味问题,但是,至少在Python 2中,通过不构建中间列表,可以节省一些资源。

在大多数上下文中,如在您的上下文中,如果数据按分组键排序,则效果最佳,因为它只对相邻元素进行分组:

key = lambda x: x['CrimeTime']
[
    {'CrimeTime': k, 'Total Incidents': sum(int(x['Total Incidents']) for x in g)} 
    for k, g in itertools.groupby(sorted(mydata, key=key), key=key)
]

使用生成器表达式而不是映射lambda主要是一个趣味问题,但是,至少在Python 2中,通过不构建中间列表,可以节省一些资源。

这应该是可行的:太晚了

 [
   {'CrimeTime': g[0], 'Total Incidents': sum(map(lambda x: int(x['Total Incidents']), g[1]))} 
      for g in 
        itertools.groupby(
          sorted(data,key=lambda x:x.values()[0]), lambda x: x['CrimeTime'])
]

这应该行得通:太晚了

 [
   {'CrimeTime': g[0], 'Total Incidents': sum(map(lambda x: int(x['Total Incidents']), g[1]))} 
      for g in 
        itertools.groupby(
          sorted(data,key=lambda x:x.values()[0]), lambda x: x['CrimeTime'])
]

要使groupby正常工作,mydata应按分组所用的键进行排序!所以我需要对mydata进行排序?是的,我将发布一个示例。为了groupby正常工作,mydata应该按照分组所用的键进行排序!所以我需要对我的数据进行排序?是的,我将发布一个示例。