快速回答:
td.get('frameId')
长答案:
其实真的很简单!元组在 Python 中被认为是不可变的对象(也就是一旦创建,您就会被“锁定”而无法进行更改),而字典是 Python 处理哈希表的方式。
除此之外,您的示例不是元组。
为了制作一个 Python 元组,您需要完成:
td=({'associatedFrame': None, 'cyclicModeNumber': None, 'description': 'Increment 10: Arc Length = 7.2813E-02', 'domain': 'ARC_LENGTH', 'fieldOutputs': 'Repository object', 'frameId': 10, 'frameValue': 0.0728124976158142, 'frequency': None, 'incrementNumber': 10, 'isImaginary': False, 'loadCase': None, 'mode': None},)
你问有什么不同?,
在字典上的右括号之后和结束括号之前看到尾随?这是 Python 创建元组的方式。你所拥有的是一个 PURE Python 字典,包裹在括号中 - 括号并没有真正为你做任何事情。 注意: 在这种情况下,尾随逗号是必需的,因为元组中只有一个元素。如果您有多个元素,则不需要尾随逗号。
但是让我们假设您想要一个元组内的嵌套字典,并且您做得正确,您需要首先访问元组内的字典 - 这是通过使用index来完成的。
因此,例如,如果您有以下情况
sampleTuple = ([0, 1, 2], "abc", {"test": "meout", "again": "andagain"})
换句话说,在惯用的原型编程命名法(=P)中将是:
sampleTuple = (LIST_OBJECT, STIRNG_OBJECT, DICTIONARY_OBJECT)
您可以通过执行以下操作来访问第一个元素(LIST_OBJECT):
sampleTuple[0]
这将返回列表:
[0, 1, 2]
注意:第一个元素由它的 'offset' 值引用,在这种情况下,“0”的偏移量表示元组的开头。
可以通过执行以下操作来达到第二个元素:
sampleTuple[1]
这将返回字符串:
"abc"
等等等等...
它看起来像这样:
Index Values |-----0----| |-----1-----| |-------2--------|
sampleTuple = (LIST_OBJECT, STIRNG_OBJECT, DICTIONARY_OBJECT)
在您的情况下(如果您有试用逗号),您在一个元组中有一个嵌套对象(字典)。因此,您需要通过执行上述相同类型的“偏移”方法来访问它:
td[0]
这将产生字典:
{'associatedFrame': None,
'cyclicModeNumber': None,
'description': 'Increment 10: Arc Length = 7.2813E-02',
'domain': 'ARC_LENGTH',
'fieldOutputs': 'Repository object',
'frameId': 10,
'frameValue': 0.0728124976158142,
'frequency': None,
'incrementNumber': 10,
'isImaginary': False,
'loadCase': None, 'mode': None}
现在,有趣的部分是在 python 中使用字典方法。有几种方法可以使用,但我发现“最安全”的方法是使用dict.get()
.
这是我的示例输出...
>>> td=({'associatedFrame': None, 'cyclicModeNumber': None, 'description': 'Increment 10: Arc Length = 7.2813E-02', 'domain': 'ARC_LENGTH', 'fieldOutputs': 'Repository object', 'frameId': 10, 'frameValue': 0.0728124976158142, 'frequency': None, 'incrementNumber': 10, 'isImaginary': False, 'loadCase': None, 'mode': None},)
>>> type(td)
<type 'tuple'>
>>> new_td = td[0]
>>> type(new_td)
<type 'dict'>
>>> new_td.get('frameId')
10
通过使用dict.get()
(与弹出、索引或使用生成器进行迭代和查找相反——这只是浪费和无能),您可以按照设计使用一些 Python 内置函数。
此外,它使您可以更好地控制返回值,因为如果key
字典中不存在 ,它将返回None
。因为大多数程序员都喜欢更健壮,所以这是进行任何类型的错误捕获的开始!
作为一个优点,如果它不返回您期望的值,您还可以设置默认值。例如:
new_td.get('frameSurpriseID', "Sorry, it doesn't exist!")
因为 frameSurpriseID 不是key
字典中的a,所以new_td
没有关联value
,所以它通常会返回None
(False)。但是,因为您传递了第二个位置(在这种情况下,它是默认返回值),所以它将改为 return Sorry, it doesn't exist
。
警告
其他答案建议将索引作为从字典中提取值的一种方式。如果你知道你的字典总是有相同的key:value
对,这很好。但是,请观察以下情况下的行为:
>>> new_td['myKey']
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
new_td['myKey']
KeyError: 'myKey'
这就是为什么我建议使用 Python 字典方法.get()
(更多控制,更强大的恕我直言)。