对于具有元组键的 Python 字典,如何只显示字典中元组元素之一设置为单个值的部分。然后还希望删除这些元素。
例如,字典
testTrak = {(0,1): '+', (0,2): '-', (1,1): '34.0', (1,2): 'test'}
我只想列出第一个数字的元素tuple = 1
;也就是说,我只想列出(1,*)
星号代表通配符的位置;因此,只有
(1,1): '34.0'
和(1,2): 'test'
将被列出。
似乎某种切片应该起作用,但看不到。
对于具有元组键的 Python 字典,如何只显示字典中元组元素之一设置为单个值的部分。然后还希望删除这些元素。
例如,字典
testTrak = {(0,1): '+', (0,2): '-', (1,1): '34.0', (1,2): 'test'}
我只想列出第一个数字的元素tuple = 1
;也就是说,我只想列出(1,*)
星号代表通配符的位置;因此,只有
(1,1): '34.0'
和(1,2): 'test'
将被列出。
似乎某种切片应该起作用,但看不到。
对不起,我看错了你的问题。这是几乎任何 Python 版本所需的解决方案:
>>> testTrak = {(0,1): '+', (0,2): '-', (1,1): '34.0', (1,2): 'test'}
>>> dict([(key, value) for key, value in testTrak.items() if key[0] == 1])
{(1, 2): 'test', (1, 1): '34.0'}
在 Python 2.7+ 中,您可以编写不太冗长的版本:
>>> testTrak = {(0,1): '+', (0,2): '-', (1,1): '34.0', (1,2): 'test'}
>>> {key:value for key, value in testTrak.items() if key[0] == 1}
{(1, 2): 'test', (1, 1): '34.0'}
排除项目只是否定 if 子句的问题,如果这是您在评论中提出的问题:
>>> testTrak = {(0,1): '+', (0,2): '-', (1,1): '34.0', (1,2): 'test'}
>>> {key:value for key, value in testTrak.items() if key[0] != 1}
{(0, 1): '+', (0, 2): '-'}
你想要的是一个前缀树,字典没有给你内置的。你有几个选择:
您可以使用 过滤字典键iterkeys()
,它具有线性时间复杂度,如果字典很大,效率会非常低;
如果内存不是问题 - 创建 2 个字典,一个按元组,一个按第一个成员映射到列表。它会很快但内存很重。
理想的方法是使用前缀树数据结构。我不知道有什么好的 python 模块可以做到这一点(我已经为我的工作编写了一个,但它不是开源的),但我确信有。