【问题标题】:python dictionary with two values for each key or class?每个键或类有两个值的python字典?
【发布时间】:2013-01-09 01:06:07
【问题描述】:

我需要这种形式的数据结构:

   test_id1: resultValue, timeChecked
   test_id2: resultValue, timeChecked
   test_id3: resultValue, timeChecked
   test_id4: resultValue, timeChecked
   ...

到目前为止,我只使用带有键值作为 id 和结果的字典来处理它。但我想添加我检查的时间。 最好的方法是什么?我可以将值设为元组吗?或者在这种情况下一个新的类更适合? 我的班级需要是什么样子才能适应上述情况?

【问题讨论】:

  • {test_id1: [resultValue, timeChecked], test_id2: [resultValue, timeChecked]} 等。我假设这些都是变量(如果不是,只需在它们周围添加引号)。我将它们作为列表而不是元组,因为您可能想要更新/更改值;元组是不可变的(不能更改),而列表是可变的(可以更改)。
  • 元组字典是通常的解决方案。

标签: python class data-structures


【解决方案1】:

创建一个类的轻量级替代方法是:1) 保留元组的简单性和 2) 允许命名(而不是位置)字段访问是 namedtuple

from collections import namedtuple

Record = namedtuple("Record", ["resultValue", "timeChecked"])
s = {"test_id1": Record("res1", "time1"), "test_id2": Record("res2", "time2")}

您现在可以使用此dict 中的值,就好像您有一个定义了resultValuetimeChecked 字段的类...

>>> s["test_id1"].resultValue
'res1'

...或者作为简单的元组:

>>> a, b = s["test_id1"]
>>> print a, b
res1 time1

【讨论】:

  • 哇,我不知道这个。 collections 里似乎有很多很酷的东西。
【解决方案2】:

我可以将值设为元组吗?

是的,我不确定你为什么不想这样做。如果是为了使查找更容易阅读,您甚至可以将值设为另一个字典。

{"test_id1" : (resultValue, timeChecked)}

{"test_id1" : {"resultValue": resultValue, "timeChecked" : timeChecked }}

我认为在这种情况下,一个全新的课程是矫枉过正的。

【讨论】:

  • 为什么要制作嵌套字典?当然,如果您有很多值,它会使搜索变得更容易,但是只做一个列表字典很容易:dict_name['test_id1'][0] 在您想要访问数据时并不难。
  • 我并没有说“很难做到”。我提供了一个替代方案。
  • 不是我不想那样做。我只是缺乏经验,想知道是否有更好的方法。非常感谢这个回复。我现在开始工作了。再次感谢!
  • 嵌套字典很有吸引力,因为d['test_id1']['resultValue'][0]explicit is better than implicit 更明确。
【解决方案3】:

您还可以为整个结构使用pandas DataFrame。除非您打算进行一些严肃的数据处理,否则这可能有点矫枉过正,但了解并直接解决您的问题是一件好事。

【讨论】:

    猜你喜欢
    • 2010-12-02
    • 2016-11-05
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    相关资源
    最近更新 更多