【问题标题】:Python dictionary iteratively expanded into listsPython字典迭代扩展成列表
【发布时间】:2023-03-08 19:02:01
【问题描述】:

我有以下 Python 字典:

 b = {'SP:1': 1.0,
      'SP:2': 2.0,
      'SP:3': 3.0,
      'SP:4': 4.0,
      'SP:5': 5.0,
      'SP:6': 6.0,
      'SP:7': 40.0,
      'SP:8': 7.0,
      'SP:9': 8.0}

我想获取这个列表并对其进行迭代以创建 9 个lists,每个后续列表都是其前身的超集。所以:

 [1.0]
 [1.0,2.0]
 [1.0,2.0,3.0]
 [1.0,2.0,3.0,4.0]
 ...
 [1.0,2.0,3.0,4.0,5.0,6.0,40.0,7.0,8.0]

使用列表理解可能有一种非常简单的方法,但我无法解决!

【问题讨论】:

  • 具有连续整数键的字典通常首先应该是列表。
  • 你自己尝试过什么?请向我们展示代码...

标签: python list dictionary list-comprehension


【解决方案1】:

您可以执行以下操作:

>>> vals = [v for k, v in sorted(b.items())]
# or shorter, but less explicit:
# vals = [b[k] for k in sorted(b)]
>>> [vals[:i+1] for i in range(len(vals))]
[[1.0],
 [1.0, 2.0],
 [1.0, 2.0, 3.0],
 [1.0, 2.0, 3.0, 4.0],
 [1.0, 2.0, 3.0, 4.0, 5.0],
 [1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
 [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 40.0],
 [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 40.0, 7.0],
 [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 40.0, 7.0, 8.0]]

第一个理解为您提供按键排序的值,因为初始 dict 本质上是无序的。第二个为您提供该值列表的所有所需切片。

【讨论】:

    【解决方案2】:

    字典不应该以这种形式使用,也不应该被认为是有序的。但是,由于键基本上是索引,我们可以这样使用它们:

    [[b['SP:'+str(j+1)] for j in range(i+1)] for i in range(len(b))]
    

    【讨论】:

    • 我认为这里有一个小错字 - 这有效:[[b['SP:'+str(j+1)] for j in range(i+1)] for i in range(len(b))]
    猜你喜欢
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 2014-11-10
    • 2015-09-28
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多