如何查看Python字典的所有元素只是元组中一个元素的一个值

时间:2012-05-24 20:39:30

标签: python dictionary key tuples multidimensional-array

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

例如,字典

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

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

似乎某种切片应该有效,但看不到它。

2 个答案:

答案 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)

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

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

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

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