python中的组字典键值

2024-10-01 19:14:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下列词典

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'的和。

你能给我一些建议吗??


Tags: nofalse字典shiftmc词典pbcremarks
3条回答

您可以使用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

请注意,要使groupby正常工作,必须按分组键对mylist进行排序:

from operator import itemgetter

mylist.sort(key=itemgetter("mc_no"))

首先,您需要对字典列表进行排序..使用以下代码。。 例如

    animals = [{'name':'cow', 'size':'large'},{'name':'bird', 'size':'small'},{'name':'fish', 'size':'small'},{'name':'rabbit', 'size':'medium'},{'name':'pony', 'size':'large'},{'name':'squirrel', 'size':'medium'},{'name':'fox', 'size':'medium'}]

    import itertools
    from operator import itemgetter
    sorted_animals = sorted(animals, key=itemgetter('size'))

然后使用以下代码

    for key, group in itertools.groupby(sorted_animals, key=lambda x:x['size']):
        print key,
        print list(group)

在你得到以下结果之后。。。

large [{'name': 'cow', 'size': 'large'}, {'name': 'pony', 'size':'large'}]
medium [{'name': 'rabbit', 'size': 'medium'}, {'name': 'squirrel', 'size':'medium'}, {'name': 'fox', 'size': 'medium'}]
small [{'name': 'bird', 'size': 'small'}, {'name': 'fish', 'size': 'small'}]

这里的代码不需要按"mc_no"键排序:

from collections import defaultdict

sums = defaultdict(int)  # key -> sum
for d in mylist:
    sums[d["mc_no"]] += d["tmst"]

相关问题 更多 >

    热门问题