python中的字典值添加值
这就是我的问题,我有一个字典,其中包含以下key=>值:python中的字典值添加值,python,Python,这就是我的问题,我有一个字典,其中包含以下key=>值: 6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:политичка -> 2 6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:државата -> 2 6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:енергично ->
6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:политичка -> 2
6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:државата -> 2
6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:енергично -> 1
1caa60ebf9459d9cd406f1a03e1719b675dcfaad78292edc7e4a56be:полициска -> 1
我有以下代码来显示所需的密钥:
for key, value in count_db.iteritems():
print key[:56]
所以现在我有:
6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002 -> 2
6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002 -> 2
6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002 -> 1
1caa60ebf9459d9cd406f1a03e1719b675dcfaad78292edc7e4a56be -> 1
我需要将它们合并到:
6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002 -> 5
1caa60ebf9459d9cd406f1a03e1719b675dcfaad78292edc7e4a56be -> 1
我已经做到了这一点,但我没有正确地做到:
length_dic=len(count_db.keys())
for key, value in count_db.iteritems():
count_element=key[:56]
#print "%s => %s" % (key[:56], value) #value[:56]
for i in range(length_dic):
i+=1
if count_element == key[:56]:
itr+=int(value)
print i
length_dic=length_dic-1
有什么提示吗?一个简单的方法是:
result = {}
for key, value in count_db.iteritems():
result[key[:56]] = result.get(key[:56], 0) + value
如果您想在一行中获得它,还可以使用reduce
实现相同的效果:
import collections
result = reduce(lambda x,y: x[y[0][:56]] += y[1] , count_db.iteritems(), collections.defaultdict(int))
把你的字典当作
>>> spam={"6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:AAAA": 2,
"6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:BBBB": 2,
"6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002:CCCC": 1,
"1caa60ebf9459d9cd406f1a03e1719b675dcfaad78292edc7e4a56be:DDDD": 1
}
你可以像下面这样做
>>> bacon=collections.defaultdict(int)
>>> for k,v in [(k[:56],v) for k,v in spam.iteritems()]:
bacon[k]+=v
>>> bacon
defaultdict(<type 'int'>, {'6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002': 5, '1caa60ebf9459d9cd406f1a03e1719b675dcfaad78292edc7e4a56be': 1})
>>>
>bacon=collections.defaultdict(int)
>>>对于k,v in[(k[:56],v)对于k,v in spam.iteritems()]:
培根[k]+=v
>>>培根
defaultdict(,{'6bc51fb21fd9eefef4ec97a241733cd59b71e8e14ad70e9068d32002':5,'1caa60ebf9459d9cd406f1a03e1719b675dcfaad78292edc7e4a56be':1})
>>>
我不明白您为什么在代码中这么做。我认为这会起作用:
tmp_dict = {}
for key, value in count_db.iteritems():
count_element=key[:56]
if count_element in tmp_dict:
tmp_dict[count_element] += value
else:
tmp_dict[count_element] = value
这正是对象(版本2.7+)的用途:
@DameJovanoski每次您需要对dict或列表进行一些转换或转换时,通常都会有一行解决方案,尽管它看起来可能并不漂亮;)当我试图打印列表时,我得到了ValueError:太多的值无法解包任何提示?ValueError:太多的值无法解包,当我想要打印它时
import collections
c = collections.Counter()
for key, value in count_db.iteritems():
c[key[:56]] += value