0

这基本上是我正在尝试做的,这是行不通的。有没有办法挑选出字典的值并对其进行数学化?为了一个废话的例子:

dictionaryNumbers = {'a':10,'b':10,'c':1,'d':1,'e':5,'f':1}
dictionaryNumbers['a'] += 5
#The goal would be dictionaryNumbers['a'] would equal 15.

编辑:

伙计们感谢您的反馈。我调用函数来修改集合的顺序似乎存在缺陷。在进行数学运算之前,我正在打印输出。再次感谢。

4

1 回答 1

6

您大部分都做对了,并且您的代码运行良好:

>>> dictionaryNumbers = {'a':10,'b':10,'c':1,'d':1,'e':5,'f':1}
>>> dictionaryNumbers['a'] += 5
>>> dictionaryNumbers['a']
15

但是对于字典中尚未包含的任何键,您必须先测试 ( if key not in dictionaryNumbers) 或使用.get()

>>> dictionaryNumbers['z'] = dictionaryNumbers.get('z', 0) + 3

这很快就会变老。

但我会改用一个collections.Counter()

>>> from collections import Counter
>>> counter = Counter()
>>> counter.update({'a':10,'b':10,'c':1,'d':1,'e':5,'f':1})
>>> counter
Counter({'a': 10, 'b': 10, 'e': 5, 'c': 1, 'd': 1, 'f': 1})
>>> counter['a'] += 5
>>> counter['a'] 
15
>>> counter.most_common(3)
[('a', 15), ('b', 10), ('e', 5)]

优点:

  • 无需测试新密钥;访问不存在的密钥会自动分配计数 0
  • 从要计数的项目列表中创建一个新计数器就像Counter(items_to_count).
  • 您可以对计数器求和;counter1 + counter2返回Counter所有值相加的新值。
  • 您可以减去计数器(负值被删除),相交它们(找到任何一个计数的最小值),或创建一个联合(最大计数)。
于 2013-01-22T16:40:09.167 回答