更改字典中的值,但只有一个键

时间:2016-02-09 16:59:32

标签: python dictionary key

我正试图解决这个小问题差不多一个小时。

  

Python是麻省理工学院的学生,喜欢水果。他有不同的类型   水果(以大写字母表示)每天从他的房子到   麻省理工学院校园在路上吃饭。但他吃水果的方式是独一无二的。   他吃完每一个水果后(除了最后一个他吃的水果)   到达校园,他休息了30秒,他买了1   每种类型的水果,而不是他刚刚拥有的水果。 Cobra,他的亲密   朋友,有一天决定对Python进行检查。他跟着他   他去麻省理工学院的校园,记下了他吃的水果类型   字符串模式的形式(例如AABBBBCA)。你能帮忙Cobra   确定不同类型水果的最大数量   当Python到达校园时,它会出现在哪里?

     

编写一个带有两个参数的函数nfruits

     
      
  • 包含水果类型及其数量的非空字典,当他离开家时(长度<10),<{1}}

  •   
  • Python所观察到的Python旅程所吃的水果的字符串模式。

  •   
     

此函数应返回不同的最大数量   当Cobra到达时,Python可用的水果类型   校园。

     

例如,如果初始数量为{'A': 1, 'B': 2, 'C': 3}   然后字符串模式是AC

     
      消耗了
  1. A,更新后的值为{'A': 0, 'B': 2, 'C': 3}
  2.   
  3. Python购买BC,更新后的值为{'A': 0, 'B': 3, 'C': 4}
  4.   
  5. 'C'已消耗,更新值为{'A': 0, 'B': 3, 'C': 3}
  6.         

    现在Python已经到达校园。所以函数将返回3   最多是三种水果的数量。

这是MOOC的可选练习,因此没有评分:我解决了更难的问题(更难)但我无法解决它。

我的尝试:

def nfruits(dictionary, string):
    i = 0
    string = sorted(string)

    for char in string:
        dictionary[char] -= 1
        # print dictionary
        i += 1
        for char in string[i:]:
            dictionary[char] += 1
            # print dictionary

     return dictionary[max(dictionary, key = dictionary.get)]

1 个答案:

答案 0 :(得分:3)

如何在任何地方添加1,然后为特定密钥减去2呢?

这样的东西
def nfruits(dictionary, string):
    i = 0
    string = sorted(string)

    for idx, char in enumerate(string):
        # We should update other fruits on all steps except the
        # last one
        if idx < len(string) - 1:
            for key in dictionary:
                dictionary[key] += 1
            dictionary[char] -= 2
        else:
            # for the last step - only decrement the fruit
            # Python ate
            dictionary[char] -= 1
        print dictionary
    return dictionary[max(dictionary, key = dictionary.get)]

if __name__ == "__main__":
    dd = {'A': 1, 'B': 2, 'C': 3}
    print nfruits(dd, 'AC')

更新:当我们浏览dict时,还有一个选项就是跳过char

def nfruits2(dictionary, string):
    i = 0
    string = sorted(string)

    for idx, char in enumerate(string):
        # Update the fruit Python ate
        dictionary[char] -= 1
        # update others he bought, skip this on the last step
        if idx < len(string) - 1:
            for key in dictionary:
                if key != char:
                    dictionary[key] += 1
        print dictionary
    return dictionary[max(dictionary, key = dictionary.get)]