【问题标题】:How to view all elements of a Python Dictionary for Just One Value of one of the Elements in a Tuple Key如何查看 Python 字典的所有元素,仅获取元组键中元素之一的一个值
【发布时间】:2012-05-31 11:27:53
【问题描述】:

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

例如字典

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

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

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

【问题讨论】:

标签: python dictionary key tuples multidimensional-array


【解决方案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 子句的问题,如果这是您在 cmets 中要求的:

>>> 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): '-'}

【讨论】:

  • 成功了。也适用于更复杂的版本。谢谢你。 (P.S> 有没有像这样更详细地涵盖字典的书籍等的推荐。没见过对字典非常严谨的Python书籍。)
  • 说实话,我只读过 Mark Pilgrim 的 Dive into Python (diveintopython.net)。请注意,在 (diveintopython3.net) 上还有一个 Python 3 版本。除此之外,我的两个日常 Python 知识来源是官方文档 (docs.python.org) 和 freenode 上的#python。在 IRC 上,您找不到比这些人更有知识的人了。
  • 还有一件事——从这个输出中删除这些项目的最佳方法是什么?
  • 要(有效地)删除,只是使用了第二个字典等于表达式 NOT,因为 pc 中的几个 Gigs 内存应该足以容纳这个: tempDict = {key:value for key, value in testTrak .items() if key[0] != 1} testTrak = tempDict
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多