0

私はこのようなデータ構造を持っています:

[
    { "key" : { "subkey" : "red", "value" : 1 }  },
    { "key" : { "subkey" : "red", "value" : 2 }  },
    { "key" : { "subkey" : "blue", "value" : 1 }  },
    { "key" : { "subkey" : "yellow", "value" : 3 }  },
    { "key" : { "subkey" : "blue", "value" : 5 }  },
    { "key" : { "subkey" : "blue", "value" : 8 }  },
    { "key" : { "subkey" : "red", "value" : 2 }  },
    { "key" : { "subkey" : "red", "value" : 3 }  },
    { "key" : { "subkey" : "red", "value" : 6 }  },
]

アイデアは、私はそれを繰り返し、少なくとも 2 つ"subkeys"が同じであるときに offsome_event()を起動したいと考えています。これにより、それらの連続するオブジェクトの値が合計され、別のオブジェクトが再びヒットするまで加算されます"subkey"

たとえば、1 番目と 2 番目の dict はsome_event()値を2+1追加して起動する必要があります。その後、3 番目 (青) と 4 番目 (黄色) の行では何も起こらず、5 番目と 6 番目 (青) の行でsome_event()は値5+8が発生します。

ありがとう!

4

1 に答える 1

1
from itertools import groupby

L = [
    { "key" : { "subkey" : "red", "value" : 1 }  },
    { "key" : { "subkey" : "red", "value" : 2 }  },
    { "key" : { "subkey" : "blue", "value" : 1 }  },
    { "key" : { "subkey" : "yellow", "value" : 3 }  },
    { "key" : { "subkey" : "blue", "value" : 5 }  },
    { "key" : { "subkey" : "blue", "value" : 8 }  },
    { "key" : { "subkey" : "red", "value" : 2 }  },
    { "key" : { "subkey" : "red", "value" : 3 }  },
    { "key" : { "subkey" : "red", "value" : 6 }  },
]


def some_event(*args):
    print args, sum(args)


for k, g in groupby(L, key=lambda x:x["key"]["subkey"]):
    g = list(g)
    if len(g) > 1:
        some_event(*(i["key"]["value"] for i in g))
于 2012-11-08T17:14:47.033 に答える