gpt4 book ai didi

python 嵌套字典理解,以元组为键

转载 作者:行者123 更新时间:2023-11-30 23:36:34 26 4
gpt4 key购买 nike

我有一个像这样的字典:

{ ('name', 'user1'): 'foo',
('user', 'user1'): 'bar',
('name', 'user2'): 'bat',
('user', 'user2'): 'baz' }

我想转换为:

{ 'user1': {'name': 'foo', 'user': 'bar'}, 
'user2': {'name': 'bat', 'user': 'baz'} }

我可以使用默认字典轻松完成此操作,但我想使用字典理解。

到目前为止我已经:

{user: {key:value for (key, user), value in my_dict.items()}}

但是用户不在循环内,所以我名称'user'未定义错误。

如何通过字典理解来实现这一目标?

最佳答案

如果键和值与序列中的项目有直接的一对一关系,则可以使用字典理解。

但是,您的输出值基于输入序列中的多个条目。除非您可以将项目分组到元组键中的每秒序列值中,否则您必须使用defaultdict设置。

使用 itertools.groupby() 当然可以进行分组,但这需要排序,与 defaultdict 加循环解决方案相比,其性能较低。

使用itertools.groupby:

from itertools import groupby

user = lambda item: item[0][1]

{user: {key[0]: value for key, value in grouped}
for user, grouped in groupby(sorted(my_dict.items(), key=user), key=user)}

输出演示:

>>> {user: {key[0]: value for key, value in grouped}
... for user, grouped in groupby(sorted(my_dict.items(), key=user), key=user)}
{'user2': {'name': 'bat', 'user': 'baz'}, 'user1': {'name': 'foo', 'user': 'bar'}}

这是一个 O(n log n) 解决方案,而 defaultdict 解决方案的复杂度为 O(n):

from collections import defaultdict

output = defaultdict(dict)

for (key, user), value in my_dict.iteritems():
output[user][key] = value

关于python 嵌套字典理解,以元组为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16425744/

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