python OrderedDict更新具有相同值的键列表

时间:2017-08-20 20:44:14

标签: python python-3.x list dictionary ordereddictionary

我正在尝试更新具有相同OrderedDict值的int的密钥列表,例如

for idx in indexes:
    res_dict[idx] = value

其中valueint变量,indexeslist intres_dict,作为键,OrderedDict是一个res_dict[indexes]=value ,尝试在一行中解决上述问题,

TypeError: unhashable type: 'list'

但得到了错误:

{{1}}

循环或列表理解是否是此处更新的唯一方法?

2 个答案:

答案 0 :(得分:3)

OrderedDict(和dict也提供)方法update一次更新多个值。

做你想做的最狂热的方式是:

res_dict.update((idx, value) for idx in indexes)

它会保留OrderedDict的原始顺序。

答案 1 :(得分:2)

您可以根据创建update的新OrderedDictfromkeys 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)])

请注意,如果OrderedDictupdate之前为空,您也可以使用:

>>> od = OrderedDict.fromkeys(indexes, value)
>>> od
OrderedDict([(1, 2), (2, 2), (3, 2)])