提取嵌套字典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中的所有组合[关闭]的主要内容,如果未能解决你的问题,请参考以下文章