对于带有元组键的Python字典,如何只显示其中一个元组元素设置为单个值的字典部分。然后还要删除这些元素。
例如,字典
testTrak = {(0,1): '+', (0,2): '-', (1,1): '34.0', (1,2): 'test'}
我想只列出tuple = 1
的第一个数字的元素;也就是说,我只想列出星号代表外卡的(1,*)
;因此,只有
将列出(1,1): '34.0'
和(1,2): 'test'
。
似乎某种切片应该有效,但看不到它。
答案 0 :(得分:1)
抱歉,我误解了你的问题。以下是几乎所有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): '-'}
答案 1 :(得分:1)
你想要的是一个前缀树,字典没有给你内置的。你有几个选择:
您可以使用iterkeys()
过滤字典键,它具有线性时间复杂度,如果字典很大,效率会非常低;
如果内存不是问题 - 创建2个词典,一个由元组创建,一个由第一个成员映射到列表。它会很快但记忆力很重。
理想的方法是使用前缀树数据结构。我不知道有什么好的python模块可以做到这一点(我已经为我的工作写了一个,但它不是开源的),但我确定有。