python - 我可以有一本带有同名键的字典吗?

标签 python dictionary key

我需要一个字典,它可能对某些键具有相同的名称,并在这种情况下引用该键时返回一个值列表。

例如

print mydict['key']
[1,2,3,4,5,6]

最佳答案

为了保持一致性,您应该将字典映射键映射到值列表(或集合),其中一些可以为空。有一个很好的成语:

from collections import defaultdict
d = defaultdict(set)

d["key"].add(...)

(defaultdict 就像一个普通的字典,但是如果缺少一个键,它会调用你在实例化它时传入的参数,并将结果用作默认值。所以这会自动如果您要求一个不存在的键,则创建一组空值。)


如果您需要对象看起来更像字典(即通过 d["key"] = ... 设置值),您可以执行以下操作。 但是这可能不是一个好主意,因为它违背了正常的 Python 语法,并且很可能稍后会反咬你一口。特别是当其他人必须维护您的代码时。

class Multidict(defaultdict):
    def __init__(self):
        super(Multidict, self).__init__(set)

    def __setitem__(self, key, value):
        if isinstance(value, (self.default_factory)): # self.default_factory is `set`
            super().__setitem__(key, value)
        else:
            self[key].append(value)

我还没有测试过。

关于python - 我可以有一本带有同名键的字典吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6813564/

相关文章:

python - Flask - jinja 模板 forloop 增加循环索引

python - 使用 python 重复条目求和到 K

c# - 多个约束泛型类型的字典和接口(interface)

javascript - 从对象中删除特定键

python - 如何在Python中用turtle在下一行写入

Python 正则表达式组 : how do I get all groups?

python - Django 序列化器将模型字段显示为字典

php - 如何将 CSV 解析为以第一个值作为键的数组?

.net - 用于 Blob 写入访问的 SAS 不断导致 Azure 存储出现 403 身份验证错误

python - Django,过滤对象并返回对象和对象父对象