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

Popular posts from this blog

sql - invalid in the select list because it is not contained in either an aggregate function -

Angularjs unit testing - ng-disabled not working when adding text to textarea -

How to start daemon on android by adb -