如果 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 看来,这比必要的步骤多了一步,我是不是漏掉了什么?
最佳答案
您显然缺少的是 defaultdict
是 dict
的一个简单(不是特别“神奇”)的子类。第一个参数所做的只是为缺失 键提供一个工厂函数。当您初始化一个 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/