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处理哈希表的方式