gpt4 book ai didi

python - 哪种结构更 Pythonic?

转载 作者:太空宇宙 更新时间:2023-11-04 11:17:29 25 4
gpt4 key购买 nike

我在我的应用程序的一部分中收集数据,然后将其发送到另一部分进行工作。我有几千条记录,每条记录都包含一个电子邮件地址和一些代表某些偏好的有序整数。

我的第一个想法是像这样在字典中组织我的数据:

{
"user1@domain.com": [23, 1, 5],
"user2@domain.com": [1, 4, 8]
}

但后来我想到了元组。我经常忽略它们,但元组在 Python 中是一个不错的选择,所以我可以这样做:

[
("user1@domain.com", [23, 1, 5]),
("user2@domain.com", [1, 4, 8])
]

这些示例分别显示了两条记录,但实际上我将在几万条记录中的某处显示。

其中一个比另一个更 pythonic 吗?我应该考虑另一种方法吗?

我倾向于字典,因为当我构建结构时,我正在挑选看起来像这样的有序记录:

(("user1@domain.com", 23), ("user1@domain.com", 1), ("user1@domain.com", 5), ("user2@domain.com", 1), ("user2@domain.com", 4), ("user2@domain.com", 8))

并将它们组合成上述形式之一。使用字典,很容易反复引用同一用户的列表。对于元组列表,我想我需要保留对最后一个元素的引用,或者继续调用列表上的 len()

最佳答案

这是一个意见问题,我的意见是两者都不是更 pythonic。构建数据的方式取决于您计划使用它的方式。

您在评论中提到,当您使用数据时,您只是循环遍历它,因此两种格式都可以。但是,对于像 ("user1@domain.com", 23) 这样的元组构建结构,dict(或 DefaultDict)会更方便:

entries = (("user1@domain.com", 23), ("user1@domain.com", 1), ("user1@domain.com", 5), ("user2@domain.com", 1), ("user2@domain.com", 4), ("user2@domain.com", 8))
result = {}
for email, number in entries:
result.setdefault(email, []).append(number)

或者使用标准库:

import itertools
import operator
entries = (("user1@domain.com", 23), ("user1@domain.com", 1), ("user1@domain.com", 5), ("user2@domain.com", 1), ("user2@domain.com", 4), ("user2@domain.com", 8))
result = dict((k, [w[1] for w in v]) for k, v in itertools.groupby(sorted(entries), operator.itemgetter(0)))

关于python - 哪种结构更 Pythonic?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56707652/

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