18

私は次の辞書を持っています

mylist = [{'tpdt': '0.00', 'tmst': 45.0, 'tmdt': 45.0, 'pbc': 30, 'remarks': False, 'shift': 1, 'ebct': '0.00', 'tmcdt': '0.00', 'mc_no': 'KA20'}, 
          {'tpdt': '0.00', 'tmst': 45.0, 'tmdt': 45.0, 'pbc': 30, 'remarks': False, 'shift': 1, 'ebct': '0.00', 'tmcdt': '0.00', 'mc_no': 'KA20'}, 
          {'tpdt': '0.00', 'tmst': 55.0, 'tmdt': 55.0, 'pbc': 30, 'remarks': False, 'shift': 1, 'ebct': '0.00', 'tmcdt': '0.00', 'mc_no': 'KA23'}, 
          {'tpdt': '0.00', 'tmst': 55.0, 'tmdt': 55.0, 'pbc': 30, 'remarks': False, 'shift': 1, 'ebct': '0.00', 'tmcdt': '0.00', 'mc_no': 'KA23'}]

辞書のリストにあるすべての辞書値「KA20」と「KA23」のキー「tmst」の合計を取得したいと考えています。

これについてあなたの提案をお願いできますか??

4

3 に答える 3

29

使用できますitertools.groupby

>>> for key, group in itertools.groupby(mylist, lambda item: item["mc_no"]):
...     print key, sum([item["tmst"] for item in group])
... 
KA20 90.0
KA23 110.0

groupbyforが適切に機能するにmylistは、グループ化キーでソートする必要があることに注意してください。

from operator import itemgetter

mylist.sort(key=itemgetter("mc_no"))
于 2013-08-12T06:33:24.087 に答える
2

キーmylistでソートする必要のないコードを次に示します。"mc_no"

from collections import defaultdict

sums = defaultdict(int)  # key -> sum
for d in mylist:
    sums[d["mc_no"]] += d["tmst"]
于 2016-04-28T11:25:27.357 に答える