[英]Replace values of a dictionary containing a list with other items for the list
我下面有字典
data = {'missing_entities': [], 'score': 0.946, 'entities_found': [('location', 'blr'), ('relative_time', 'last 10 hours')]}
我想用loc
替换键entities_found
的值location
,用period
替换值relative_time
,但是我无法做到这一点。
list(data['entities_found'][0])[0] = 'loc'
list(data['entities_found'][1])[0] = 'period'
我仍然得到原始的字典值,我在做什么错?
不确定为什么要这样做,元组是不可变的,但是您可以覆盖列表内容
data['entities_found'][0]=('loc',data['entities_found'][0][1])
您的entities_found
是一个元组列表。 元组本质上是不可变的。 像这样替换整个元组:
data['entities_found'][0] = ('location', 'new_loc')
因为
list(data['entities_found'][0])
创建一个新列表 ,然后在其中使用基于索引的分配,但是永远不要保留对新列表的引用,因此将立即对其进行回收。 永远不会触摸原始对象。
即使元组是可变的,如列表,这也不起作用。 注意:
>>> x = [1, 2, 3]
>>> list(x)[0] = 99
>>> x
[1, 2, 3]
也许更清楚:
>>> ts = [('a','b'), ('c','d')]
>>> list(ts[0]) # convert object at index 0 to list
['a', 'b']
>>> ts
[('a', 'b'), ('c', 'd')] # original object hasn't changed
您将不得不执行以下操作:
>>> ts = [('a','b'), ('c','d')]
>>> first, second = ts
>>> ts[0] = 'foo', first[1]
>>> ts[1] = 'bar', second[1]
>>> ts
[('foo', 'b'), ('bar', 'd')]
我认为找到键的实体的值是元组,因此您不能更新元组的单个值。 您必须将元组更改为列表,或者用另一个元组更新元组。
data['entities_found'][0] = ('loc', data['entities_found'][0][1])
data['entities_found'][1] = ('period', data['entities_found'][1][1])
^这是上述第二种方式。
元组在Python中是不可变的。 因此,如果您发现自己必须在元组中编辑值,则列表可能会更好地满足您的目的。
如果您真的坚持这样做,则需要将元组转换为列表,在此列表中进行字符串更改,将列表转换回元组,然后将其重新插入字典中。
这是一种方法:
a = list(data['entities_found'][0])
a[0] = 'loc'
b = list(data['entities_found'][1])
b[0] = 'period'
data['entities_found'][0] = tuple(a)
data['entities_found'][1] = tuple(b)
输出:
{'entities_found': [('loc', 'blr'), ('period', 'last 10 hours')],
'missing_entities': [],
'score': 0.946}
python中的元组是不可变的。 所以不能真正赋值。 在此处了解更多信息: http : //radar.oreilly.com/2014/10/python-tuples-immutable-but-potentially-changing.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.