使用itertools库获取对象组合?

杰巴通

我想在Python中生成列表对象的组合,并且正在研究itertools.product或类似的函数来计算组合。由于itertools.product从多个数组生成组合

我有一个看起来像这样的对象:

{
    "Cities": [
        {
            "Id": 1,
            "Value": "New York"
        },
        {
            "Id": 2,
            "Value": "Boston"
        }
    ],
    "People": [
        {
            "Id": 1,
            "Value": "Michael"
        },
        {
            "Id": 2,
            "Value": "Ryan"
        },
        {
            "Id": 3,
            "Value": "Jim"
        },
        {
            "Id": 4,
            "Value": "Phyllis"
        }
    ]
}

我想生成一个列表,以显示每个城市中生活的所有人群。因此,在上述情况下,将列出8个值。

我的以下代码如下:

import json
import itertools


def main():
    combinations = []
    with open('people.json') as f:
        data = json.load(f)

    combinations = list(itertools.product(*data))
    print(combinations)


if __name__ == "__main__":
    main()

运行时,我得到一个完全不同的结果:

在此处输入图片说明

如何修改代码以获得所需的结果?

注意:不必使用itertools,我只是认为itertools用于此类计算

普拉纳夫·霍桑加迪

为什么得到输出:

当您执行时list(itertools.product(*data)),将传递与product您执行时看到的相同的事情

for x in data:
    print(x)

即,你做到了

itertools.product(['Cities', 'People'])

这就是为什么您在这两个字符串中得到字符乘积的原因(是鸭子输入!)

[
 ('C', 'P'),
 ('C', 'e'),
 ('C', 'o'),
 ('C', 'p'),
 ('C', 'l'),
 ('C', 'e'),
 ('i', 'P'),
 ('i', 'e'),
 ('i', 'o'),
 ('i', 'p'),
 ('i', 'l'),
 ('i', 'e'),
 ...
]

如何获得所需的输出:

您使用的是product()正确的,但是提供了错误的数据。

cities = [c['Value'] for c in data['Cities']] # Extract all cities Value from list-of-dicts
people = [c['Value'] for c in data['People']] # Extract all people Value from list-of-dicts
print(list(itertools.product(cities, people))) # Product

这给出了输出:

[
 ('New York', 'Michael'),
 ('New York', 'Ryan'),
 ('New York', 'Jim'),
 ('New York', 'Phyllis'),
 ('Boston', 'Michael'),
 ('Boston', 'Ryan'),
 ('Boston', 'Jim'),
 ('Boston', 'Phyllis')
]

如果您想要dict对象而不是Value键,则只需将这些对象传递给product()

print(list(itertools.product(data['Cities'], data['People']))) # Product

这使

[
  ({'Id': 1, 'Value': 'New York'}, {'Id': 1, 'Value': 'Michael'}),
  ({'Id': 1, 'Value': 'New York'}, {'Id': 2, 'Value': 'Ryan'}),
  ({'Id': 1, 'Value': 'New York'}, {'Id': 3, 'Value': 'Jim'}),
  ({'Id': 1, 'Value': 'New York'}, {'Id': 4, 'Value': 'Phyllis'}),
  ({'Id': 2, 'Value': 'Boston'}, {'Id': 1, 'Value': 'Michael'}),
  ({'Id': 2, 'Value': 'Boston'}, {'Id': 2, 'Value': 'Ryan'}),
  ({'Id': 2, 'Value': 'Boston'}, {'Id': 3, 'Value': 'Jim'}),
  ({'Id': 2, 'Value': 'Boston'}, {'Id': 4, 'Value': 'Phyllis'})
]

如预期的那样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我想使用 itertools 的组合方法以列表列表的形式获取列表的所有组合

来自分类Dev

筛选itertools组合以获取动态约束数量

来自分类Dev

itertools:获取操作(+-* /)和列的组合

来自分类Dev

使用itertools在python中进行组合

来自分类Dev

不使用itertools的所有组合?

来自分类Dev

使用 itertools 组合时避免重复 - python

来自分类Dev

如何使用翻新库获取对象?

来自分类Dev

Python itertools.combinations:如何获取组合数字的索引

来自分类Dev

Python itertools.combinations:如何同时获取组合内组合数字的索引

来自分类Dev

不使用itertools重复生成组合

来自分类Dev

从数据库对象获取数据而不使用foreach

来自分类Dev

使用Ajax从数据库获取对象数组

来自分类Dev

我应该使用哪个API或库来获取JSON对象

来自分类Dev

使用 R 和 rjson 库获取 json 对象

来自分类Dev

Itertools与索引组合

来自分类Dev

Python itertools 与 sum 组合

来自分类Dev

从itertools.chain对象获取一个数组

来自分类Dev

在对象列表(组合列表)上使用LINQ获取与用户相关的信息

来自分类Dev

如何使用代理解析从SimpleJpaRepository <T,ID>对象获取存储库接口对象

来自分类Dev

使用PDO对象的库

来自分类Dev

使用组合列访问数据库填充组合框

来自分类Dev

python itertools.permutations组合

来自分类Dev

使用 itertools groupby 从分类列表中获取索引值

来自分类Dev

如何使用具有相同 dtasnapshot 对象的每个循环获取 2 个节点的组合数据

来自分类Dev

从组合框到数据库获取价值

来自分类Dev

从组合框获取数据到数据库

来自分类Dev

如何获取组合框选定的值以转到数据库

来自分类Dev

如何使用itertools-Python查找最小长度为N的元素组合

来自分类Dev

复制itertools循环对象

Related 相关文章

  1. 1

    我想使用 itertools 的组合方法以列表列表的形式获取列表的所有组合

  2. 2

    筛选itertools组合以获取动态约束数量

  3. 3

    itertools:获取操作(+-* /)和列的组合

  4. 4

    使用itertools在python中进行组合

  5. 5

    不使用itertools的所有组合?

  6. 6

    使用 itertools 组合时避免重复 - python

  7. 7

    如何使用翻新库获取对象?

  8. 8

    Python itertools.combinations:如何获取组合数字的索引

  9. 9

    Python itertools.combinations:如何同时获取组合内组合数字的索引

  10. 10

    不使用itertools重复生成组合

  11. 11

    从数据库对象获取数据而不使用foreach

  12. 12

    使用Ajax从数据库获取对象数组

  13. 13

    我应该使用哪个API或库来获取JSON对象

  14. 14

    使用 R 和 rjson 库获取 json 对象

  15. 15

    Itertools与索引组合

  16. 16

    Python itertools 与 sum 组合

  17. 17

    从itertools.chain对象获取一个数组

  18. 18

    在对象列表(组合列表)上使用LINQ获取与用户相关的信息

  19. 19

    如何使用代理解析从SimpleJpaRepository <T,ID>对象获取存储库接口对象

  20. 20

    使用PDO对象的库

  21. 21

    使用组合列访问数据库填充组合框

  22. 22

    python itertools.permutations组合

  23. 23

    使用 itertools groupby 从分类列表中获取索引值

  24. 24

    如何使用具有相同 dtasnapshot 对象的每个循环获取 2 个节点的组合数据

  25. 25

    从组合框到数据库获取价值

  26. 26

    从组合框获取数据到数据库

  27. 27

    如何获取组合框选定的值以转到数据库

  28. 28

    如何使用itertools-Python查找最小长度为N的元素组合

  29. 29

    复制itertools循环对象

热门标签

归档