python - 一步初始化附加到列表的defaultdict?

标签 python defaultdict

如果 defaultdict 可以按照以下几行进行初始化,那会很方便

d = defaultdict(list, (('a', 1), ('b', 2), ('c', 3), ('d', 4), ('a', 2),
   ('b', 3)))

生产

defaultdict(<type 'list'>, {'a': [1, 2], 'c': [3], 'b': [2, 3], 'd': [4]})

相反,我得到

defaultdict(<type 'list'>, {'a': 2, 'c': 3, 'b': 3, 'd': 4})

为了得到我需要的东西,我最终不得不这样做:

d = defaultdict(list)
for x, y in (('a', 1), ('b', 2), ('c', 3), ('d', 4), ('a', 2), ('b', 3)):
    d[x].append(y)

在 IMO 看来,这比必要的步骤多了一步,我是不是漏掉了什么?

最佳答案

您显然缺少的是 defaultdictdict 的一个简单(不是特别“神奇”)的子类。第一个参数所做的只是为缺失 键提供一个工厂函数。当您初始化一个 defaultdict 时,您正在初始化一个 dict

如果你想生产

defaultdict(<type 'list'>, {'a': [1, 2], 'c': [3], 'b': [2, 3], 'd': [4]})

你应该像初始化任何其他值为列表的 dict 一样初始化它:

d = defaultdict(list, (('a', [1, 2]), ('b', [2, 3]), ('c', [3]), ('d', [4])))

如果您的初始数据必须采用第二个元素始终为整数的元组形式,则只需使用 for 循环即可。你称之为额外的一步;我称之为清晰明了的方法。

关于python - 一步初始化附加到列表的defaultdict?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18520825/

相关文章:

python - 无法使用pip安装matplotlib

python - 如何判断 boto.sqs.Queue.write() 是否成功?

python - Scipy.optimization 在描述相同旋转的两组数据之间找到未知参数

Python 打印到文件。使用defaultdict排序

python - 使用相同的键、多个值追加到字典

python - 通过将 default_factory 作为命名参数传递来构造 defaultdict

python - 过滤掉两个嵌套字典之间不共享的键

python - locust.io 中响应时间分布的目的是什么?

python - Python中+(pos)一元运算符的目的是什么?

python - 如何获取 defaultdict 中值的类型