循环使用python dict的有效方法?

2024-06-28 14:42:20 发布

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

我有一个pythondict格式如下:

for (itemA, itemB) in items.keys():
    Do_something_with(itemA, itemB)

itemA有许多itemB与之相关,但它是不确定的。例如,itemA的一个实例可能有10个itemB,但是itemA的另一个实例可能只有1个。你知道吗

我想在数组中循环如下:

thing = 0
for (itemA, ~) in items.keys()[0]:
    for itemB in all_items_associated_with(itemA):
        thing += function_on(itemA, itemB)

我可以想出一些方法来做这件事,这是可怕的昂贵的计算,但我觉得有一个更python和/或有效的方法来做这件事。这是一个非常昂贵的方法

thing = 0
itemAs = find_all_itemAs(items)
for itemA in itemAs:
    for (itemAtmp, itemB) in items.keys():
        if( itemAtmp == itemA ):
            thing += function_on(itemA, itemB)

但我知道那很可怕。你知道吗


Tags: 实例方法inforonwithitemsfunction
3条回答

你可以这样做:

for itemA in dict:
    for itemB in dict[itemA]:
        thing += finction_on(itemA, itemB)

这将遍历字典的所有键以及这些键处的所有项。你知道吗

您可以使用sorteditertools.groupby将相关项有效地组合在一起。你知道吗

keys = sorted(items.keys())
for itemA, it in itertools.groupby(keys, lambda x: x[0]):
    for _, itemB in it:
        thing += function_on(itemA, itemB)

以下是可能的替代方案:

  • 使用itertools.groupby对相关键进行分组:

    for itm_a, group in itertools.groupby(sorted(dict), lambda itm_a, itm_b: itm_a):
        # now we can process everything that has the same first item
        my_thing = sum([function_on(itm_a, itm_b) for _, itm_b in group], 0)
    
  • 类似的方法,不使用itertools.group_by,是自己发现组

    groups = {}
    for itm_a, itm_b in dict:
        groups.setdefault(itm_a, []).append(itm_b)
    
    # now we can process all of the related keys together
    for itm_a, all_itm_b in groups.items():
        # do something
        my_thing = sum([function_on(itm_a, itm_b) for itm_b in all_itm_b], 0)
    

相关问题 更多 >