繁体   English   中英

用列表的其他项替换包含列表的字典的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM