我有四种类型:AAA,BBB,CCC和FUN。我正在编写一个函数,它将以两对的形式接收这些类型的字典作为字符串。 (该词典只包含3个随机配对,即:
Example01 = { "AAA-BBB": 123, "AAA-CCC": 456, "BBB-CCC": 789}
Example02 = {"FUN-AAA": 111,"FUN-BBB": 222,"FUN-CCC": 333}
我需要对各种游戏进行计算,但是我在阅读字符串键时遇到了麻烦...
第一期:
一个问题是,我可以收到"FUN-AAA"
或"AAA-FUN"
,但它们是相同的(即"FUN-AAA"
= "AAA-FUN"
)。如何操作字典键,以便我可以将这两个键读取为相等?
第二期:
当我收到{"FUN-AAA": 1 , "FUN-CCC": 2, "FUN-BBB": 3}
时,如果我将整个字符串中的键读出来表示三个不同的值,但实际上我需要知道'FUN'
已显示在3条记录中的3条记录中...我想在字典中拆分字符串,但找不到合适的方法。换句话说,我基本上需要知道如何计算"FUN"
出现的次数及其各自的值,所以上面的例子将是......
FUN ==> 3 ==> 6(总和)
AAA ==> 1 ==> 1(总和)
BBB ==> 1 ==> 3(总和)
CCC ==> 1 ==> 2(总和)
答案 0 :(得分:0)
>>> from collections import defaultdict
>>> counts = defaultdict(list)
>>> example02 = {"FUN-AAA": 111,"FUN-BBB": 222,"FUN-CCC": 333}
>>> for key,value in example02.items():
... for k in key.split("-"):
... counts[k].append(value)
...
>>> counts
defaultdict(<type 'list'>, {'FUN': [111, 222, 333], 'AAA': [111], 'BBB': [222],
'CCC': [333]})
获得计数很简单:
>>> [(key,len(items)) for key,items in counts.items()]
[('FUN', 3), ('AAA', 1), ('BBB', 1), ('CCC', 1)]
以及总和:
>>> [(key,sum(items)) for key,items in counts.items()]
[('FUN', 666), ('AAA', 111), ('BBB', 222), ('CCC', 333)]
答案 1 :(得分:0)
根据您的要求,您可以单独处理成对中的每个键:
pairs = {"FUN-AAA": 1 , "FUN-CCC": 2, "FUN-BBB": 3}
counts = {}
sums = {}
for pair, value in pairs.items():
keys = pair.split('-')
for key in keys:
counts[key] = 1 + counts.get(key, 0)
sums[key] = value + sums.get(key, 0)
print counts
print sums