gpt4 book ai didi

python - 从 dict 创建字典列表的更多 pythonic 方法,其中列表元素是 `{v:[k1, k2, k3]}` 形式的字典

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:44 26 4
gpt4 key购买 nike

我需要从字典创建一个字典列表。原始字典必须有键不重复但值可以。例如:

{ 'b': 68, 'c': 68, 'x': 68, 'z': 401, 'aa':401, 'a': 2}

我需要从上面创建一个字典列表,如下所示:

[{68: ['b', 'c', 'x']}, {401: ['z', 'aa']}, {2: ['a']}]

我尝试了什么?我已经尝试过这个并且它有效,但我确信可能有更好的方法来实现相同的结果。

lofd=[]
origdict = { 'b': 68, 'c': 68, 'x': 68, 'z': 401, 'aa':401, 'a': 2}
for i in origdict.items():
k = i[0]
v = i[1]
try:
d[v].append(k)
except:
d = {v:[]}
d[v].append(k)
if d not in lofd:
lofd.append(d)

lofd
[{68: ['b', 'c', 'x']}, {401: ['z', 'aa']}, {2: ['a']}]

我看过其他问题,人们可能认为这些问题与此问题重复,但这些问题的答案并未涵盖如何将字典转换为字典列表。有很多答案应该如何反转字典,这有点像我正在尝试做的,但我没有反转字典。有答案显示从字典创建一个元组的元组,但我确实需要一个字典列表,而不是不可变的元组。

最佳答案

您也可以使用列表理解来做到这一点:

[dict((_, )) for _ in {v: [_k for _k, _v in d.items() if _v ==  v] for v in d.values()}.items()]

为了证明它有效

>>> d = { 'b': 68, 'c': 68, 'x': 68, 'z': 401, 'aa':401, 'a': 2}
>>> [dict((_, )) for _ in {v: [_k for _k, _v in d.items() if _v == v] for v in d.values()}.items()]
[{68: ['b', 'c', 'x']}, {401: ['z', 'aa']}, {2: ['a']}]

注意 我不太清楚这是什么用途,但如果可以的话,我建议您使用字典而不是字典列表,因为这种理解比单独的字典理解要慢.如果可能的话,我建议只使用 dict 理解,这在我看来会好得多,尽管返回一个 dict 而不是一个 more pythonic 的列表,或者至少更有意义,特别是因为你可以使用 dict.items() 对其进行相同的迭代。

{v: [_k for _k, _v in d.items() if _v ==  v] for v in d.values()}

这会返回一个字典,如下所示:

{68: ['b', 'c', 'x'], 401: ['z', 'aa'], 2: ['a']}

关于python - 从 dict 创建字典列表的更多 pythonic 方法,其中列表元素是 `{v:[k1, k2, k3]}` 形式的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56814537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com