Python:如果它与键完全匹配,如何从字典中删除一个值?

Posted

技术标签:

【中文标题】Python:如果它与键完全匹配,如何从字典中删除一个值?【英文标题】:Python: how to remove a value from a dict if it exactly matches the key? 【发布时间】:2017-08-11 04:39:59 【问题描述】:

因为键有多个值,我想删除与键本身相同的值?也就是我有一本字典jumps

jumps = 'I6': ['H6', 'I6', 'I5'], 'T8' : ['T6', 'S6', 'T8']

我想从'I6' 键中删除值'I6',并从'T8' 键中删除'T8'。我怎么能这样做?我在解析字符串与值时混淆了。

【问题讨论】:

答案可以从here找到。这是重复的问题。 @bismute:在那个答案中,一个 整个 键及其对应的值被删除,这里的值是“操纵的”。 【参考方案1】:

另一种可能的方式可能是:

vals.remove(val) for key,vals in jumps.items() for val in vals if val == key

由于它引用的是值列表或数组,因此从列表中删除将影响jumps 的值。

【讨论】:

在调用之后,它会改变jumps。尽管时间复杂度可能不高,但是它不会节省空间吗,因为除了jumps 之外我们没有使用任何东西(None 将是额外的空间)?【参考方案2】:
for key in jumps:
    jumps[key].remove(key)

【讨论】:

【参考方案3】:

有一个名为remove 的内置命令将从列表中删除一个项目。我们可以通过使用字符串键从我们的dictionary 访问元素开始。该值恰好是一个列表,然后我们可以对其使用remove 命令。

这是您要演示的清单:

jumps = 
    'I6': [ # we are accessing this value that happens to be a list
        'H6',
        'I6', #then Python will sort for and remove this value
        'I5'
    ],
    'T8' : [
        'T6',
        'S6',
        'T8'
    ]




jumps = 'I6': ['H6', 'I6', 'I5'], 'T8' : ['T6', 'S6', 'T8']

jumps['I6'].remove('I6')
jumps['T8'].remove('T8')
print(jumps)

【讨论】:

【参考方案4】:

您可以将 单行字典推导列表推导 一起使用:

result = <b>k</b>:[vi for vi in <b>v</b> if <b>k</b> != vi] for <b>k,v</b> in jumps.items()

这会导致:

>>> k:[vi for vi in v if k != vi] for k,v in jumps.items()
'T8': ['T6', 'S6'], 'I6': ['H6', 'I5']

请注意,您将从列表中删除与键相同的 所有 元素。此外,删除过程针对 所有 键完成。

代码的工作方式如下:我们遍历jumps 字典中的每个键值对k,v。然后对于每个这样的对,我们在结果字典中构造一个键,并将[vi for vi in v if k != vi]与它相关联。这是一个列表理解,我们过滤掉所有等于kv 值。所以只剩下vis(按顺序)是k != vi

【讨论】:

这很有意义,而且效果很好,此外,感谢您的帮助解释!如果允许,我会将其标记为答案!【参考方案5】:

为我工作

jumps = 'I6': ['H6', 'I6', 'I5'], 'T8' : ['T6', 'S6', 'T8']

key = 'I6'

if key in jumps[key]:
    jumps[key].remove(key)

print(jumps)

【讨论】:

以上是关于Python:如果它与键完全匹配,如何从字典中删除一个值?的主要内容,如果未能解决你的问题,请参考以下文章

将字符串与字典值完全匹配并检索键 - python

如何从IOS中的字典数组中删除重复性? [关闭]

正则表达式可以用作字典中的键吗?

如何从python中的字典输出中组装时间序列数据以进行监督分类

Python - 如何从三个数据集中查找不匹配的记录

从位于字典中的数组中删除与搜索词匹配的所有值(字符串)?