拆分字典字符串值 - Python

时间:2014-03-14 20:35:08

标签: python string list dictionary split

我有四种类型: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(总和)

2 个答案:

答案 0 :(得分:0)

如何使用collections.defaultdict

>>> 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