【问题标题】:Multiply a dictionary value by other in a nested dictionary在嵌套字典中将字典值乘以其他值
【发布时间】:2013-11-12 02:36:48
【问题描述】:

抱歉,问题太长了。 我在 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)})]}

这样,在嵌套字典中,每个键都有一对数字:第一个数字是最初分配给该键的值,第二个数字是第一个数字相乘的结果在字典中的关键。如上所示,例如,嵌套在 Paul 中的键 i 在原始文件中的值为 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 的速度非常慢,这将有很大帮助。谢谢!

【问题讨论】:

  • 我真的不明白为什么 1 值会在输出中更改为其他数字,但像 Lika 的 f 这样的其他数字保持不变。这些新数字从何而来?

标签: python-3.x dictionary tuples


【解决方案1】:
{k: (lst[0], float(v)/lst[0]) for k, v in lst[1].items()}

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

【讨论】:

  • 这么简单,我都看不出来!非常感谢!
猜你喜欢
  • 2022-06-13
  • 2018-03-27
  • 1970-01-01
  • 2020-09-09
  • 2019-12-04
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多