3

Dictionary.items() の出力を受け取り、アイテムが辞書に追加されるとそれをユーザーに表示する wxPython のテキスト ボックスがあります。ただし、生データは非常に醜く、次のようになります

[(u'BC',45)
(u'CHM',25)
(u'CPM',30)]

Dictionary.items() がタプルのリストであることは知っていますが、wxPython の SetValue() メソッドと互換性のある適切な形式を作成する方法がわかりません。

リストとタプルを繰り返してみました。printステートメントを使用すると、出力は問題ありません。しかし、printステートメントを SetValue() に置き換えると、タプルの両方の項目ではなく、各タプルの最後の値のみを取得するように見えます。

また、文字列を作成してその文字列を SetValue() に渡すことも試みましたが、繰り返しますが、両方ではなく、タプルで 1 つの項目しか取得できません。

助言がありますか?


編集:はい、dictionary.items() の結果を wxPython アプリケーションのテキスト フィールドに渡しています。上記のような結果ではなく、単に次のようなものを探しています。

BC 45
CHM 25
CMP 30

各タプルから各値を取り出して視覚的なリストを作成するだけで、特別なことは何もありません。

文字列形式を作成してそれを SetValue() に渡そうとしましたが、タプルの 2 つの値にハングアップします。フォーマット方法に応じて、各文字列を二重に出力して整数を追加するか、単に整数を返します。

4

6 に答える 6

5

目的の結果を返す組み込みの辞書メソッドはありません。

ただし、辞書をフォーマットするヘルパー関数を作成することで、目標を達成できます。たとえば、次のようになります。

def getNiceDictRepr(aDict):
    return '\n'.join('%s %s' % t for t in aDict.iteritems())

これにより、正確な目的の出力が生成されます。

>>> myDict = dict([(u'BC',45), (u'CHM',25), (u'CPM',30)])
>>> print getNiceDictRepr(myDict)
BC 45
CHM 25
CPM 30

次に、アプリケーション コードで、次のように渡すことで使用できますSetValue

self.textCtrl.SetValue(getNiceDictRepr(myDict))
于 2008-10-26T18:59:14.830 に答える
0

出力をフォーマットする「より良い」方法を見つけました。いつものように、よりエレガントな方法で解決できるときに、私はそれを核攻撃しようとしていました.

for key, value in sorted(self.dict.items()):
    self.current_list.WriteText(key + " " + str(self.dict[key]) + "\n")

この方法では、辞書をアルファベット順に並べ替えることもできます。これは、既に選択または使用されているアイテムを識別する際に非常に役立ちます。

于 2008-11-18T03:57:39.453 に答える
0
text_for_display = '\n'.join(item + u' ' + unicode(value) for item, value in my_dictionary.items())
于 2008-10-26T12:10:39.710 に答える
0

% フォーマット (C では sprintf として知られています) を使用します。例:

"%10s - %d" % dict.items()[0]

書式指定文字列の% 変換指定の数は、dict.items() の場合、2 のタプル長と一致する必要があります。文字列書式設定演算子の結果は文字列であるため、SetValue() の引数として使用しても問題ありません。 . 辞書全体を文字列に変換するには:

'\n'.join(("%10s - %d" % t) for t in dict.items())

フォーマット変換タイプはdocで指定されています。

于 2008-10-26T12:17:42.020 に答える
0

多分かなりの印刷モジュールが役立ちます:

>>> import pprint
>>> pprint.pformat({ "my key": "my value"})
"{'my key': 'my value'}"
>>> 
于 2008-10-26T11:02:06.323 に答える
0

そのデータは、テーブル/グリッドとして表示される方がはるかに優れているようです。

于 2008-10-26T13:16:30.093 に答える