python - How do I pick one dict inside a list of dictionaries that are differed by one value? -
i have list of dictionaries this:
xyz =[ {"key1":"1","key2":"2","key3":"x_1"},{"key1":"1","key2":"2","key3":"x_2"},{"key1":"1","key2":"2","key3":"x_3"},{"key1":"5","key2":"6","key3":"y_1"},{"key1":"5","key2":"6","key3":"y_2"},{"key1":"5","key2":"6","key3":"y_3"}]
i trying select first dict every unique 'key1' value. above dict expecting output as:
xyz=[{"key1":"1","key2":"2","key3":"x_1"},{"key1":"5","key2":"6","key3":"y_1"},]
i tried following code:
dictout = [dict(sample) sample in set(tuple(item.items()) item in xyz)]
but ended getting:
[{'key3': 'x_1', 'key2': '2', 'key1': '1'}, {'key3': 'x_3', 'key2': '2', 'key1': '1'}, {'key3': 'y_2', 'key2': '6', 'key1': '5'}, {'key3': 'x_2', 'key2': '2', 'key1': '1'}, {'key3': 'y_1', 'key2': '6', 'key1': '5'}, {'key3': 'y_3', 'key2': '6', 'key1': '5'}]
i not able construct unique dicts based on value of "key1".
it great if gives me idea approach.
thank you.
you can use groupby
itertools
library:
import itertools xyz =[ {"key1":"1","key2":"2","key3":"x_1"},{"key1":"1","key2":"2","key3":"x_2"}, {"key1":"1","key2":"2","key3":"x_3"},{"key1":"5","key2":"6","key3":"y_1"}, {"key1":"5","key2":"6","key3":"y_2"},{"key1":"5","key2":"6","key3":"y_3"}] result = [] key, value in itertools.groupby(xyz, lambda x: x["key1"]): result.append(list(value)) print([x[0] x in result])
output:
[{'key1': '1', 'key2': '2', 'key3': 'x_1'}, {'key1': '5', 'key2': '6', 'key3': 'y_1'}]
or list comprehension:
result = [list(value) key, value in itertools.groupby(xyz, lambda x: x["key1"])]
you can use itemgetter
operator
library:
import operator import itertools result = [list(value) key, value in itertools.groupby(xyz, operator.itemgetter("key1")]
you can use dictionary too:
d = {} key, value in itertools.groupby(xyz, lambda x: x["key1"]): d[key] = list(value) print([value[0] key, value in sorted(d.items())])
Comments
Post a Comment