尝试使用“OrderedDict”数据结构对复杂算法进行编码

我正在尝试编写算法:


我有这个数据类型的输入,如下所示:OrderedDict


odict_items([(3, [(0, 1), (1, 1), (1, 1)]), (11, [(0, 0), (1, 1), (1, 1)]), (12, [(0, 0), (1, 1), (1, 1)])])

我正在尝试编写一个函数来添加每个元组中相同元组的数量,例如预期输出,如下所示:如果存在相同的元组,则如果是两倍,则为一个:key(1,1)12


odict_items([(3, [(0, 1), (1, 1), (1, 1)],2), (11, [(0, 0), (1, 1), (1, 1)],2), (12, [(0, 0), (1, 0), (1, 1)]),1])

这是我的尝试,但如何改进它并将其添加到?OrderedDict


def foo(OrderedDict):

    listOfDic = list(makeDataStruc().items())

    tupleCounter = 0

    for i in range(len(listOfDic[1])):

        if listOfDic[1][1][i][0] == 1 and listOfDic[1][1][i][1] == 1:

            tupleCounter += 1

    return tupleCounter

我在哪里犯了错误?


千巷猫影
浏览 96回答 1
1回答

慕少森

我做出以下假设,您只想将 计数添加到值中(1,1)OrderedDict您不希望创建覆盖当前 .OrderedDict您可以修改原始词典现在,根据问题中提供的信息和上述假设,一种可能的解决方案是将每个值替换为包含两个元素的列表,即'[原始值,(1,1)的计数]。from collections import OrderedDictodict_items = [(3, [(0, 1), (1, 1), (1, 1)]),               (11, [(0, 0), (1, 1), (1, 1)]),               (12, [(0, 0), (1, 1), (1, 1)])]my_odict = OrderedDict()for item in odict_items:    k, v = item    my_odict[k] = v现在计算每个值中出现的次数,并相应地更新值(1,1)pattern_to_find = (1, 1)for key, value in my_odict.items():    tuple_count = value.count(pattern_to_find)    new_value = [value, tuple_count]    my_odict[key] = new_value现在字典有以下内容:OrderedDict([(3, [[(0, 1), (1, 1), (1, 1)], 2]),             (11, [[(0, 0), (1, 1), (1, 1)], 2]),             (12, [[(0, 0), (1, 1), (1, 1)], 2])])现在,您可以创建其他函数以仅访问值或元组计数# Returns the count of (1, 1) onlydef get_count(my_dict, key):    return my_dict[key][1]# Return the original value onlydef get_tuple(my_dict, key):    return my_dict[key][0]所以你可以像这样使用它们print(my_odict[3])# [[(0, 1), (1, 1), (1, 1)], 2]print(get_count(my_odict,3))# 2print(get_tuple(my_odict, 3))# [(0, 1), (1, 1), (1, 1)]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python