如何在一个值不同的字典列表中选择一个dict?

2024-09-29 23:30:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的字典列表:

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"}]

我尝试为每个唯一的“key1”值选择第一个dict。对于上述dict,我期望输出为:

 xyz=[{"key1":"1","key2":"2","key3":"x_1"},{"key1":"5","key2":"6","key3":"y_1"},]

我尝试了以下代码:

dictout = [dict(sample) for sample in set(tuple(item.items()) for item in xyz)]

但我最终得到:

[{'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'}]

我无法基于“key1”的值构造唯一的dict。你知道吗

如果有人能给我一个接近的想法那就太好了。你知道吗

谢谢你。你知道吗


Tags: sample代码in列表for字典itemdict
1条回答
网友
1楼 · 发布于 2024-09-29 23:30:32

可以使用^{}库中的^{}

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 = []
for key, value in itertools.groupby(xyz, lambda x: x["key1"]):
    result.append(list(value))

print([x[0] for x in result])

输出:

[{'key1': '1', 'key2': '2', 'key3': 'x_1'}, {'key1': '5', 'key2': '6', 'key3': 'y_1'}]

或者即使有列表理解:

result = [list(value) for key, value in itertools.groupby(xyz, lambda x: x["key1"])]

也可以使用^{}库中的^{}

import operator
import itertools

result = [list(value) for key, value in itertools.groupby(xyz, operator.itemgetter("key1")]

您也可以使用另一本词典:

d = {}
for key, value in itertools.groupby(xyz, lambda x: x["key1"]):
    d[key] = list(value)

print([value[0] for key, value in sorted(d.items())])

相关问题 更多 >

    热门问题