1

对于具有元组键的 Python 字典,如何只显示字典中元组元素之一设置为单个值的部分。然后还希望删除这些元素。

例如,字典

testTrak = {(0,1): '+', (0,2): '-', (1,1): '34.0', (1,2): 'test'}

我只想列出第一个数字的元素tuple = 1;也就是说,我只想列出(1,*)星号代表通配符的位置;因此,只有 (1,1): '34.0'(1,2): 'test'将被列出。

似乎某种切片应该起作用,但看不到。

4

2 回答 2

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): '-'}
于 2012-05-24T20:41:03.243 回答
1

你想要的是一个前缀树,字典没有给你内置的。你有几个选择:

  1. 您可以使用 过滤字典键iterkeys(),它具有线性时间复杂度,如果字典很大,效率会非常低;

  2. 如果内存不是问题 - 创建 2 个字典,一个按元组,一个按第一个成员映射到列表。它会很快但内存很重。

  3. 理想的方法是使用前缀树数据结构。我不知道有什么好的 python 模块可以做到这一点(我已经为我的工作编写了一个,但它不是开源的),但我确信有。

于 2012-05-24T20:41:29.483 回答