在嵌套字典中将字典值乘以其他字符

时间:2013-11-12 02:36:49

标签: python-3.x dictionary tuples

很抱歉这个问题很长。 我在Python 3.2中有这样的字典:

d = {'Paul ': [5, Counter({'i': 1, 'in': 1, 't': 1, 'fa': 1, 'cr': 1})],
            'Lisa ': [4, Counter({'f': 3, 'bo': 1})],
            'Tracy ': [6, Counter({'sl': 3, 'fi': 1, 'an': 1, 'piz': 1})],
            'Maria': [2, Counter({'t': 2})]}

我需要为键中的第一个值复用每个Counter值,并将这些值附加到键中:

d2 = {'Paul': [5, {'i': (2, 10), 'in': (4, 20), 't': (3, 15), 'fa': (2, 10), 'cr': (2, 10)})], 
'Lisa': [4, {'f': (3, 12), 'bo': (8, 32)})], 
'Tracy': [6, {'sl': (3, 18), 'fi': (1, 6), 'an': (5, 30), 'piz': (2, 12)})]}

因此,在嵌套字典中,我将拥有每个键的一对数字:第一个数字将是最初分配给该键的值,第二个数字将是第一个数字相乘的结果在字典中的关键。如上所示,例如,嵌套在i中的键Paul在原始文件中具有值1,并且在输出中该值附加为10(10是键{{的值) 1}}乘以5,键'i': 2的第一个值)。等等... 我尝试将其转换为元组:

'Paul' : 5, Counter({'i':2...

但我得到了错误的结果,例如:

for key, lst in d.items():
    mult[key] = [lst[0], {k: (lst[0], float(v)/lst[0]) for k, v in lst[1].items()}]

其中归属于每个键的原始值被乘法结果的第一个值代替。我真的尝试了不同的东西来解决这个问题,但无济于事。有没有人提示如何解决这个问题。我正在慢慢地学习Python,这将有很大的帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

{k: (lst[0], float(v)/lst[0]) for k, v in lst[1].items()}

这里的第一个值是lst[0],它是字典列表中的第一个值,但不是计数器中的原始值;这将是v