我正在尝试更新具有相同OrderedDict
值的int
的密钥列表,例如
for idx in indexes:
res_dict[idx] = value
其中value
是int
变量,indexes
是list
int
个res_dict
,作为键,OrderedDict
是一个res_dict[indexes]=value
,尝试在一行中解决上述问题,
TypeError: unhashable type: 'list'
但得到了错误:
{{1}}
循环或列表理解是否是此处更新的唯一方法?
答案 0 :(得分:3)
OrderedDict(和dict也提供)方法update
一次更新多个值。
做你想做的最狂热的方式是:
res_dict.update((idx, value) for idx in indexes)
它会保留OrderedDict
的原始顺序。
答案 1 :(得分:2)
您可以根据创建update
的新OrderedDict
来fromkeys
OrderedDict
。
fromkeys
方法允许为所有键提供默认值,因此您不需要在此处进行任何显式迭代。因为它使用了OrderedDict
s fromkeys
,所以它也会保留indexes
的顺序:
>>> from collections import OrderedDict
>>> indexes = [1, 2, 3]
>>> value = 2
>>> od = OrderedDict([(0, 10), (1, 10)])
>>> od.update(OrderedDict.fromkeys(indexes, value)) # that's the interesting line
>>> od
OrderedDict([(0, 10), (1, 2), (2, 2), (3, 2)])
请注意,如果OrderedDict
在update
之前为空,您也可以使用:
>>> od = OrderedDict.fromkeys(indexes, value)
>>> od
OrderedDict([(1, 2), (2, 2), (3, 2)])