Python 更改groupby中的元素

Python 更改groupby中的元素,python,python-2.7,itertools,Python,Python 2.7,Itertools,我根据一个键将数据行分组在一起,如果该组中的任何行在状态字段中有“R”,那么它们都应该将该字段更改为“R” 以下是我尝试过的代码: from operator import itemgetter from itertools import groupby headers = data.pop(0) Col = {headers[i].strip().upper():i for i in range(len(headers))} data = sorted(data, key=itemgett

我根据一个键将数据行分组在一起,如果该组中的任何行在状态字段中有“R”,那么它们都应该将该字段更改为“R”

以下是我尝试过的代码:

from operator import itemgetter
from itertools import groupby

headers = data.pop(0)
Col = {headers[i].strip().upper():i for i in range(len(headers))}

data = sorted(data, key=itemgetter(Col["KEY_FIELD"]))
for key,group in groupby(data, lambda x: x[Col["KEY_FIELD"]]):
  for item in group: 
    if any([item[Col["STATUS"]]=="R" for item in group]):
      item[Col["STATUS"]] = "R"
然而,这似乎并没有改变数据中的任何内容。是否有一种pythonic方法可以根据此条件更改每个组的原始数据变量,或者我需要创建一个新列表,并在迭代每个组后将数据复制到其中?

组是一个迭代器,不能像这样循环两次。首先将组转换为列表,然后只测试一次:

您可能想要反转
for
循环,并在那里进行
if
测试;如果您只需要在满足
状态\u r
条件的情况下执行此操作,则再次在组上循环没有什么意义:

for key, group in groupby(data, group_key):
    group = list(group)
    if any(item[Col["STATUS"]] == "R" for item in group):
        for item in group: 
           item[Col["STATUS"]] = "R"

=
不是赋值运算符。用“编辑”修复了它。代码仍然不会改变数据。第二块代码实际上是我最初使用的格式,将组转换为列表,这就是技巧所在。
for key, group in groupby(data, group_key):
    group = list(group)
    if any(item[Col["STATUS"]] == "R" for item in group):
        for item in group: 
           item[Col["STATUS"]] = "R"