在嵌套字典python中提取所有组合

时间:2017-07-10 19:06:47

标签: python dictionary pyspark pyspark-sql

我有一本字典:

{'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'])

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

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

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对象,你不能依赖订单。