Python 使用字典的元组

Python 使用字典的元组,python,dictionary,tuples,Python,Dictionary,Tuples,我有以下字典元组: td=({'associatedFrame': None, 'cyclicModeNumber': None, 'description': 'Increment 10: Arc Length = 7.2813E-02', 'domain': 'ARC_LENGTH', 'fieldOutputs': 'Repository object', 'frameId': 10, 'frameValue': 0.

我有以下字典元组:

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})
我想获取与键
frameId
关联的值。 我对元组和字典没有太多的经验,我发现的问题都是关于元组字典的,所以我请求你的帮助。谢谢

编辑:
实际上,我已经尝试过你的解决方案,但我忘了提到我正在使用python从另一个程序中获取结果。这个程序有一个特定的组织,所以为了工作,我必须编写
td.frameId

如果这是你真正拥有的,它只是一本字典

td['frameId']
会有用的。括号不能构成元组。逗号构成元组

foo = (1) #integer
foo = (1,) #1 element tuple
foo = 1, #1 element tuple
只有在语法不明确(如函数调用)的少数情况下才需要括号。显然:

foo(1,2,3)
不同于

foo(1,(2,3))

如果您实际上有一个
元组
,那么您需要对它进行索引以获取字典,您可以对字典进行索引以获取所需的项

td[0]['frameId']

如果这真的是你所拥有的,那它只是一本字典

td['frameId']
会有用的。括号不能构成元组。逗号构成元组

foo = (1) #integer
foo = (1,) #1 element tuple
foo = 1, #1 element tuple
只有在语法不明确(如函数调用)的少数情况下才需要括号。显然:

foo(1,2,3)
不同于

foo(1,(2,3))

如果您实际上有一个
元组
,那么您需要对它进行索引以获取字典,您可以对字典进行索引以获取所需的项

td[0]['frameId']

这不是一个元组,它只是一个安静的dict。。。i、 插入(无用)括号的口述

td['frameId']
查找密钥

注:


({'this':'将是元组中的dict'},)

那不是元组,它只是一个安静的
dict
。。。i、 插入(无用)括号的口述

td['frameId']
查找密钥

注:


({'this':'将是元组中的dict'},)

您可以使用列表理解:

matches = [ d for d in td if d['frameID'] == DESIRED_VALUE ]

(假设
td
实际上有多个字典;您的示例只是冗余括号中的一个字典。)

您可以使用列表理解:

matches = [ d for d in td if d['frameID'] == DESIRED_VALUE ]

(假设
td
实际上有多个字典;您的示例只是冗余括号对中的一个字典。)

您没有使用字典元组,td本身就是一个字典。
然后,如果您想使用
td['frameId']

获取td值,您没有使用字典元组,td本身就是一个字典。
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})

print(td['frameId'])
然后,如果要使用
td['frameId']
获取td值

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

print(td['frameId'])
也许你错过了

也许你错过了

快速回答:

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制作元组的方法。您拥有的是一个纯Python字典,用parens包装——parens并没有真正为您做任何事情NB:在这种情况下,需要后面的逗号,因为元组中只有一个元素。如果有多个元素,那么就不需要后面的逗号

但是让我们假设您希望在元组中有一个嵌套字典,并且您做得正确,您需要首先访问元组中的字典-这是通过使用索引来实现的

举个例子,如果你有以下几点

sampleTuple = ([0, 1, 2], "abc", {"test": "meout", "again": "andagain"})
换句话说,在惯用的原型编程术语(=p)中是:

sampleTuple = (LIST_OBJECT, STIRNG_OBJECT, DICTIONARY_OBJECT)
通过执行以下操作,可以访问第一个元素(列表\对象):

sampleTuple[0]
sampleTuple[1]
这将返回以下列表:

[0, 1, 2]
注意:第一个元素由其“offset”值引用,在本例中,偏移量“0”表示元组的开头

第二个要素可以通过以下操作实现:

sampleTuple[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
由于frameSurpriseID不是字典
新建\u td
中的
键,因此没有关联的
,因此它通常会返回
(False)。但是,由于您传递了第二个位置(在本例中,它是默认的返回值),因此它将返回
对不起,它不存在

警告

其他答案建议将索引作为从字典中提取值的一种方法。如果您知道您的字典将始终具有相同的
key:value
对,则这是很好的。但是,在以下情况下观察该行为:

>>> new_td['myKey']

Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    new_td['myKey']
KeyError: 'myKey'
>>新的\u td['myKey']
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
新的[我的钥匙]
KeyError:“myKey”
这就是为什么我建议使用Python字典方法
.get()
(控制越多,IMHO越健壮)

快速回答:

td.get('frameId')
答案很长:

其实很简单!元组在Python中被认为是不可变的对象(即一旦创建了元组,就“锁定”不进行更改),而字典则是Python处理哈希表的方式