【问题标题】:Printing product of numbers from Nested Dictionary打印嵌套字典中的数字产品
【发布时间】:2020-02-13 21:44:15
【问题描述】:
db = {'A':{(1,2): 3, (4,5): 6, (7,8): 9}, 'B': {(9,8):7, (6,5): 4, (3,2): 1 }}

我有一个字典数据库,我正在尝试打印这些值,但我的代码不起作用。我知道这与打印功能中的 i.keys 有关,但如何让它打印正确的产品。

for i in db.values():
    for x in i.keys():
        if x[1] >= 1:
            print(x[1]*i.values)

应该打印出来:

6
30
72
56
20
2

【问题讨论】:

  • 预期结果是什么?
  • @RicardoAbe 对不起!我对其进行了编辑以显示应打印的结果

标签: python dictionary nested key


【解决方案1】:

以下解决方案将打印包含列表内两个数字(元组)乘积的列表,我希望每个元组内只有两个数字。

List comprehension 简化了代码,减少了代码行数。

value = [  x[0].__mul__(x[1]) for i in db.values() for x in i.keys() ]

输出

[2, 20, 56, 72, 30, 6]

【讨论】:

    【解决方案2】:

    在第 4 行,变量 i 是一个字典,因此当您执行 x[1]*i.values 时,您正在将一个整数 (x[1]) 与来自 dict 的内置方法 values 相乘。即使您放了括号,i.values() 也会从您当前的二级字典中返回一组值。因此,需要使用密钥x,这样i[x]就会返回一个整数:

    for i in db.values():
        for x in i.keys():
            if x[1] >= 1:
                print(x[1]*i[x])
    

    解决问题的另一种方法:

    for i in db.values():
        for (_, j), value in i.items():
            if j >= 1:
                print(j*value)
    

    【讨论】:

      【解决方案3】:

      您可以使用reversed函数以相反的顺序生成字典值和子字典的键:

      for d in reversed(db.values()):
          for a, b in reversed(d):
              print(a * b)
      

      这个输出:

      6
      30
      72
      56
      20
      2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 1970-01-01
        相关资源
        最近更新 更多