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]
与它相关联。这是一个列表理解,我们过滤掉所有等于k
的v
值。所以只剩下vi
s(按顺序)是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:如果它与键完全匹配,如何从字典中删除一个值?的主要内容,如果未能解决你的问题,请参考以下文章