如何用字典作为值反转列表中的键值对?

时间:2015-06-30 04:02:21

标签: python pyspark

我有一个键值对,如下所示:

((1,{'foo':1,'abc':2,'xyz':3,'def':2}),(2,{'ghu':3,'kie':2}))

我能够将键值对反转为以下形式:

((({'foo':1,'abc':2,'xyz':3,'def':2}),1),(({'ghu':3,'kie':2})),2)

但我需要以下列格式填写它们。带有各种选项,但没有成功

(({'foo':1}),1)
(({'abc':2}),1)
(({'xyz':3}),1)
(({'def':2}),1)
(({'ghu':3}),2)
(({'kie':2}}),2)

任何人都能帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

此列表理解将产生您想要的格式:

l = ((1,{'foo':1,'abc':2,'xyz':3,'def':2}),(2,{'ghu':3,'kie':2}))
tuple((({k:v}),i) for i,j in l for k,v in j.items())

答案 1 :(得分:0)

如果元组符合您的要求,那么您可以使用如下所示的简单generator expression,然后将其传递给tuple()函数以获取所需的元组。

示例 -

>>> t = ((1,{'foo':1,'abc':2,'xyz':3,'def':2}),(2,{'ghu':3,'kie':2}))
>>>
>>> nt = tuple((({k:d[k]}),i) for i, d in t for k in d.keys())
>>> nt
(({'def': 2}, 1), ({'xyz': 3}, 1), ({'abc': 2}, 1), ({'foo': 1}, 1), ({'kie': 2}, 2), ({'ghu': 3}, 2))

答案 2 :(得分:0)

  1. 迭代给定元组中的每个项目。
  2. 为项目迭代第二个元素,即字典部分。
  3. 创建新项目,即(({key:value},),item [0])
  4. 将结果附加到输出变量。
  5. <强>代码:

    input_val = ((1,{'foo':1,'abc':2,'xyz':3,'def':2}),(2,{'ghu':3,'kie':2}))
    
    output_val = []
    for i in input_val:
        for key, value in i[1].items():
            output_val.append( (({key:value},), i[0]))
    
    import pprint
    pprint.pprint(output_val)
    

    输出:

    [(({'xyz': 3},), 1),
     (({'foo': 1},), 1),
     (({'abc': 2},), 1),
     (({'def': 2},), 1),
     (({'ghu': 3},), 2),
     (({'kie': 2},), 2)]