提取嵌套字典python中的所有组合[关闭]

Posted

技术标签:

【中文标题】提取嵌套字典python中的所有组合[关闭]【英文标题】:Extracting All Combinations in nested dictionary python [closed] 【发布时间】:2017-07-10 19:06:46 【问题描述】:

我有一本像这样的字典:

'6400': '6401': '1.0', '6407': '0.3333333333333333', '6536': '0.0', '6448': '0.0'

我想生产一个类似于 Pyspark 的结构:

('6400',['6400','6401','1.0'])
('6400',['6400','6407','0.3333333333333333'])
('6400',['6400','6536','0.0'])
('6400',['6400','6448','0.0'])

【问题讨论】:

Generating all possible combinations in a nested dictionary的可能重复 @Jeremy 没有 pyspark 标签。 抱歉更正了错字。 你能用 Python 解决它并尝试使其适应 PySpark 吗? 可以考虑使用 dict.items()、itertools.repeat() 和 zip()。 【参考方案1】:

如果你在 python 中这样做,你可以使用下面的代码来生成你想要的结构。

d = '6400': '6401': '1.0', '6407': '0.3333333333333333', '6536': 
'0.0', '6448': '0.0'
result = []
for outer_e in d:
    for inner_e in d[outer_e]:
        e = [outer_e, inner_e, d[outer_e][inner_e]]
        e = (outer_e, e)
        result.append(e)

【讨论】:

【参考方案2】:

有点笨重,但解决问题的另一种方法:

In [1]: d = '6400': '6401': '1.0', '6407': '0.3333333333333333', '6536': '0.0'
   ...: , '6448': '0.0'

In [2]: map(lambda item: [(item[0], [item[0], *i]) for i in item[1].items()], d.items())
Out[2]: <map at 0x104563e48>

In [3]: list(_)
Out[3]:
[[('6400', ['6400', '6401', '1.0']),
  ('6400', ['6400', '6407', '0.3333333333333333']),
  ('6400', ['6400', '6536', '0.0']),
  ('6400', ['6400', '6448', '0.0'])]]

而且由于它是无序的dict 对象,你不能依赖顺序。

【讨论】:

非常感谢您的帮助。 !!

以上是关于提取嵌套字典python中的所有组合[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Python Pandas Dataframe 中的 STRING 列中提取嵌套字典?

python中的多个嵌套循环等效替换

从python中的嵌套字典中获取所有值

在python的嵌套json字典中查找一个值

如何从 Python 中的字典中提取所有值?

提取嵌套字典和列表中的叶值集,不包括无