簡単な答え:
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 辞書です。括弧は実際には何もしていません。 注意: この場合、タプルには 1 つの要素しかないため、末尾のコンマが必要です。複数の要素がある場合、末尾のコンマは必要ありません。
しかし、タプル内にネストされたディクショナリが必要であり、それを正しく行ったと仮定しましょう。最初に、タプル内のディクショナリにアクセスする必要があります。これは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]
注意: 最初の要素は、その「オフセット」値によって参照されます。この場合、「0」のオフセットはタプルの開始を表します。
2 番目の要素に到達するには、次のようにします。
sampleTuple[1]
これにより、次の文字列が返されます。
"abc"
などなど…。
次のようになります。
Index Values |-----0----| |-----1-----| |-------2--------|
sampleTuple = (LIST_OBJECT, STIRNG_OBJECT, DICTIONARY_OBJECT)
あなたの場合(トライアルコンマがあった場合)、タプル内にネストされたオブジェクト(辞書)が1つあります。したがって、上記と同じタイプの「オフセット」アプローチを実行して、アクセスする必要があります。
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
ディクショナリnew_td
にないため、関連付けられていないため、通常は(False)value
が返されます。None
ただし、2 番目の位置 (この場合は既定の戻り値) を渡したので、代わりに が返され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()
(より制御し、より堅牢な IMHO) を使用することをお勧めする理由です。