Multiplicați tastele * valori într-un dicționar?

a = {2: 4, 3: 2, 5: 1, 7: 1}

Cheile reprezintă numere prime; valorile reprezintă contoare. Vreau să calculez numărul pe care îl obții prin iterarea prin tastele * de valori și însumând totalul. Care este cel mai Pythonic mod de a face acest lucru?

>>> [k*v for k,v in a.items()]
[8, 6, 5, 7]

dar

>>> sum(k*v for k,v in a.items())
Traceback (most recent call last):
  File "", line 1, in 
TypeError: 'int' object is not callable
0
Modul general în care iterați prin intermediul tuplurilor (cheie, valoare) este cu yourDict.items()
adăugat autor ninjagecko, sursa

2 răspunsuri

Pe aici:

sum(k*v for k,v in a.items())

sau cu denumirea semantică:

sum(p*c for p,c in primesToCounts.items())
0
adăugat
consultați editarea de mai sus ..
adăugat autor Chris, sursa
Ai dreptate. Oamenii ... lecții valoroase învățate. Mulțumesc pentru că.
adăugat autor Chris, sursa
@Chris: a ar trebui să fie dicționarul dvs. De exemplu, în întrebarea dvs. ați spus a = {2: 4, 3: 2, 5: 1, 7: 1} . Nu cred că numiți aceste două lucruri în același fel. Această metodă funcționează atât în ​​Python2 cât și în Python3. Dacă găsiți că mai aveți eroarea de mai sus, tastați a în interpret veți găsi ceva prostește ca a == 5 .
adăugat autor ninjagecko, sursa
@Chris: Problema dvs. este că ați definit o variabilă numită sum care a umbrit funcția încorporată numită sum . Introduceți suma în interpretul dvs. curent: 23 sau ceva similar. Acum, tastați sum într-un interpret curat: . Probabil că încercați să faceți 23 (k * v pentru k, v în a.items ())
adăugat autor ninjagecko, sursa

Ce zici:

>>> a = {2: 4, 3: 2, 5: 1, 7: 1}
>>> [key * val for key, val in a.items()]
... [8, 6, 5, 7]
>>> sum([key * val for key, val in a.items()])
... 26

E destul de pitonică.

0
adăugat
Python România
Python România
100 participanți

Comunitatea pasionaților de Python din România.