Reputation: 79
I have a list of x like this:
x =[[[1, 2]], [[2, 1], [2, 3]], [[3, 2]], [[4, 7, 6, 5]]]
And I try to create a list of dictionary in final result like this:
dict_list = [{"user_idx": 1, "partner_1": 2}, {"user_idx": 2, "partner_1": 1, "partner_2": 3},
{"user_idx": 3, "partner_1": 2}, {"user_idx": 4, "partner_1":7, "partner_2": 6,"partner_3":5}]
How can I complete it with python code?
Upvotes: 2
Views: 533
Reputation: 6642
This clearly needs a single list comprehension solution, though admittedly this is getting a bit out of hands:
dict_list = [
{"user_idx": (s := list(chain.from_iterable(z if i == 0 else z[1:]
for i, z in enumerate(el))))[0],
**{f"partner_{ii + 1}": p for ii, p in enumerate(s[1:])}}
for el in x]
print(dict_list)
# Out:
[{'user_idx': 1, 'partner_1': 2},
{'user_idx': 2, 'partner_1': 1, 'partner_2': 3},
{'user_idx': 3, 'partner_1': 2},
{'user_idx': 4, 'partner_1': 7, 'partner_2': 6, 'partner_3': 5}]
Upvotes: 1
Reputation: 195543
Try:
x =[[[1, 2]], [[2, 1], [2, 3]], [[3, 2]], [[4, 7, 6, 5]]]
out = {}
for g in x:
for subl in g:
out.setdefault(subl[0], []).extend(subl[1:])
out = [
{
"user_idx": k,
**{"partner_{}".format(idx): i for idx, i in enumerate(v, 1)},
}
for k, v in out.items()
]
print(out)
Prints:
[
{"user_idx": 1, "partner_1": 2},
{"user_idx": 2, "partner_1": 1, "partner_2": 3},
{"user_idx": 3, "partner_1": 2},
{"user_idx": 4, "partner_1": 7, "partner_2": 6, "partner_3": 5},
]
Upvotes: 2