如何在python中从不同长度的列表创建字典

ycl3bljg  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(406)

我有一个x列表,如下所示:

  1. x =[[[1, 2]], [[2, 1], [2, 3]], [[3, 2]], [[4, 7, 6, 5]]]

我尝试在最终结果中创建一个字典列表,如下所示:

  1. dict_list = [{"user_idx": 1, "partner_1": 2}, {"user_idx": 2, "partner_1": 1, "partner_2": 3},
  2. {"user_idx": 3, "partner_1": 2}, {"user_idx": 4, "partner_1":7, "partner_2": 6,"partner_3":5}]

如何使用python代码完成它?

pu3pd22g

pu3pd22g1#

尝试:

  1. x =[[[1, 2]], [[2, 1], [2, 3]], [[3, 2]], [[4, 7, 6, 5]]]
  2. out = {}
  3. for g in x:
  4. for subl in g:
  5. out.setdefault(subl[0], []).extend(subl[1:])
  6. out = [
  7. {
  8. "user_idx": k,
  9. **{"partner_{}".format(idx): i for idx, i in enumerate(v, 1)},
  10. }
  11. for k, v in out.items()
  12. ]
  13. print(out)

印刷品:

  1. [
  2. {"user_idx": 1, "partner_1": 2},
  3. {"user_idx": 2, "partner_1": 1, "partner_2": 3},
  4. {"user_idx": 3, "partner_1": 2},
  5. {"user_idx": 4, "partner_1": 7, "partner_2": 6, "partner_3": 5},
  6. ]
展开查看全部
daupos2t

daupos2t2#

这显然需要一个单一的列表理解解决方案,尽管不可否认这有点失控:

  1. dict_list = [
  2. {"user_idx": (s := list(chain.from_iterable(z if i == 0 else z[1:]
  3. for i, z in enumerate(el))))[0],
  4. **{f"partner_{ii + 1}": p for ii, p in enumerate(s[1:])}}
  5. for el in x]
  6. print(dict_list)
  7. # Out:
  8. [{'user_idx': 1, 'partner_1': 2},
  9. {'user_idx': 2, 'partner_1': 1, 'partner_2': 3},
  10. {'user_idx': 3, 'partner_1': 2},
  11. {'user_idx': 4, 'partner_1': 7, 'partner_2': 6, 'partner_3': 5}]

相关问题