我正在尝试从name_num
字典的值创建一个新的字典,其中列表的长度是新键,而name_num
字典的键和值是值。因此:
name_num = {"Bill": [1,2,3,4], "Bob":[3,4,2], "Mary": [5, 1], "Jim":[6,17,4], "Kim": [21,54,35]}
我想创建以下字典:
new_dict = {4:{"Bill": [1,2,3,4]}, 3:{"Bob":[3,4,2], "Jim":[6,17,4], "Kim": [21,54,35]}, 2:{"Mary": [5, 1]}}
我尝试了许多变化,但这段代码让我离目标最近:
for mykey in name_num:
new_dict[len(name_num[mykey])] = {mykey: name_num[mykey]}
输出:
new_dict = {4:{"Bill": [1,2,3,4]}, 3:{"Jim":[6,17,4]}, 2:{"Mary": [5, 1]}}
我知道需要以某种方式循环遍历代码,这样才能将其他值添加到键3。
defaultdict
会因为被访问而保留它的值。 - Bergid = defaultdict(list); value = d[non_existent_key]; value.append(1)
,则期望在字典中有键值对non_existent_key: [1]
,但是如果defaultdict
在访问时不保留创建的默认值,则始终会得到[]
。defaultdict
的属性是,当您尝试以任何方式访问不存在的键时,该键会添加默认值。唯一不触发键创建的检查是像key in the_dict
这样的检查。 - Bakuriudefaultdict
的想法是在人们使用普通dict
类的setdefault
方法时开发出来的。你可以像这样使用它:d.setdefault(key, default_value)
。这就像一个 get,但如果键不存在,它会添加它并分配default_value
的值。问题是,函数调用总是创建默认值,因此可能会相当慢。defaultdict
是一个优化的字典,其中每个 get 调用基本上都是一个setdefault
调用,但它可以避免在键存在时创建默认值,以实现最大的简洁和速度。 - Bakuriu