0

对不起,很长的问题。我在 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 是键的值'i': 2乘以 5,即键的第一个值'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()}]

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

d2 = {'Paul ': [5, {'i': (5, 10), 'in': (5, 20), 't': (5, 15), 'cr: (5, 10}]...

其中归属于每个键的原始值被乘法结果的第一个值替换。我真的尝试了不同的方法来解决这个问题,但无济于事。有没有人知道如何解决这个问题。我学习 Python 的速度非常慢,这将有很大帮助。谢谢!

4

1 回答 1

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

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

于 2013-11-12T15:02:36.000 回答